【发布时间】:2014-12-21 20:06:05
【问题描述】:
我迷路了...回到 SO :)
以下代码通过我的自定义控件 ccGistaFigure 正确显示文本行。我现在在控件上放置一个 InkCanvas。最初,InkCanvas 将设置为仅识别手势。
我想弄清楚的是,在接收到特定手势后,InkCanvas 如何告诉自定义控件进行自我更改,或者,有没有办法让 XAML 将 ccGistaFigure 换成另一个 ccGistaFigure 对象?
具体来说,如果我点击 InkCanvas 上的一个单词,我希望能够确定我点击了哪个单词并强制自定义控件在该单词的字母之间添加空格。因此,如果这个词是“Testing”,那么在这个词上轻按(或手势)应该会将文本更改为“T_e_s_t_i_n_g”。
(ccGistaFigure 派生自 FrameworkElement,直接从 FormattedText 对象显示字符串)。
假设我可以确定被点击的单词,那么更改显示的最佳方法是什么?
我当前的 XAML 是:
<UserControl x:Class="Nova5.UI.Views.Ink.InkEditorView"
.....
<Grid Background="#FFE24848" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="3*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Canvas Grid.Row="1" Grid.RowSpan="3">
<ScrollViewer VerticalScrollBarVisibility="Auto"
Width="{Binding Parent.ActualWidth, Mode=OneWay, RelativeSource={RelativeSource Self}}"
Height="{Binding Parent.ActualHeight, Mode=OneWay, RelativeSource={RelativeSource Self}}"
>
<Grid Background="White" >
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="100"/>
</Grid.RowDefinitions>
<wc:ccGistaFigure Grid.Row="0"
Text="{Binding Text, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}}"
LineHeight="{Binding LineHeight, UpdateSourceTrigger=PropertyChanged,Mode=OneWayToSource}"
AscenderlineOffset="{Binding AscenderlineOffset, UpdateSourceTrigger=PropertyChanged,Mode=OneWayToSource}"
DescenderlineOffset="{Binding DescenderlineOffset, UpdateSourceTrigger=PropertyChanged,Mode=OneWayToSource}"
MidlineOffset="{Binding MidlineOffset,UpdateSourceTrigger=PropertyChanged,Mode=OneWayToSource}"
BaselineOffset="{Binding BaselineOffset, UpdateSourceTrigger=PropertyChanged, Mode=OneWayToSource}"
WritingPadSize="{Binding WritingPadSize, UpdateSourceTrigger=PropertyChanged, Mode=OneWayToSource}"
/>
<InkCanvas Grid.Row="0" Grid.RowSpan="2"
Background="Transparent"
DefaultDrawingAttributes="{Binding Pen}"
EditingMode="{Binding EditingMode}"
Strokes="{Binding Strokes}" />
</Grid>
</ScrollViewer>
</Canvas>
</Grid>
</UserControl>
任何想法都会受到赞赏。谢谢。
【问题讨论】:
-
有点不清楚到底在问什么:你有实际“扩展”字母的问题吗?或者你有没有挂接到“嘿,ccGistaFigure 被点击”的事件?或者您还有其他问题吗?
-
@ChrisEelmaa 我实际上遇到了上述所有问题,但我主要希望有一种 XAML 方法以某种方式“切换”出第一个 ccGistaFigure 和第二个 ccGistaFigure ,其中文本已被更改。不过,最大的问题将是准确确定点击了哪个角色。 (注意:我将使用 InkCanvas 提供的“手势”和笔)。谢谢。
-
您所说的“最大的问题是准确地确定点击了哪个字符”是什么意思? - 为什么你需要知道?我以为我们在谈论文字。
标签: wpf xaml custom-controls inkcanvas