我有一个要求,允许选择在只读屏幕显示的文字。格式问题试图创建一个WPF标签模板,让文本选择
我们开发一个简单的解决一个想出了使用TextBox
而不是标签或TextBlock的,具有以下样式:
<Style x:Key="ControlData" TargetType="{x:Type TextBox}">
<Setter Property="Background" Value="Transparent" />
<Setter Property="BorderThickness" Value="0" />
<Setter Property="IsReadOnly" Value="True" />
<Setter Property="TextWrapping" Value="Wrap" />
<!-- unrelated properties ommitted -->
</Style>
我不喜欢使用一个TextBox存在的想法,除其他事项外,因为它迫使我使用Binding Mode=OneWay
为只读属性,所以我试图定义我可以申请到标签的样式,以获得相同的结果:
<Style x:Key="SelectableLabel" TargetType="Label">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Label">
<TextBox Style="{StaticResource ControlData}"
Text="{Binding Path=Content, Mode=OneWay,
RelativeSource={RelativeSource FindAncestor,
AncestorType=Label}}"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
的问题是,一些我的绑定有StringFormat
集,那就是迷路了。
- 有没有办法保持外部绑定的格式?
- 我应该创建我的模板/装订不同?
- 有一个完全不同的做法,是比这更好的?
- 我应该停止与挑剔和与文本框去?
@wangburger:你是什么意思? – 2011-05-09 15:59:51
使用“TextBox”有什么问题?你到目前为止所说的只是你不喜欢它。为什么? – 2011-05-09 16:23:34
@RobertRossney:因为TextBox是一个**输入**元素,为其设置了基础结构,而不是用于只读显示。这也迫使我添加'Mode = OneWay'到我的所有绑定中,而无需setter。 – 2011-05-09 16:38:26