风格的绑定数据转换器
无法通过森林看到树木。 尝试简单的数据绑定,我想用转换器格式化值。 (在这个转换器例子,数字数据是不显示0)。风格的绑定数据转换器
资源:
<conv:FormattingConverter x:Key="FormattingConverter"/>
<Style x:Key="EGTSTextBoxInt" TargetType="TextBox">
<Setter Property="Background" Value="{StaticResource CC_BACKGROUND}" />
<Setter Property="Foreground" Value="{StaticResource CC_FOREGROUND}" />
<Setter Property="FontFamily" Value="{StaticResource DefaultFont}" />
<Setter Property="FontSize" Value="{StaticResource DefaultFontSize}" />
<Setter Property="FontWeight" Value="Normal" />
<Setter Property="FontStyle" Value="Normal" />
<Setter Property="VerticalContentAlignment" Value="Center" />
<Setter Property="VerticalAlignment" Value="Center"
<Setter Property="HorizontalAlignment" Value="Center" />
<Setter Property="HorizontalContentAlignment" Value="Center" />
<Setter Property="IsReadOnly" Value="True" />
</Style>
文本框:
<TextBox Name="Bill_Item"
Grid.Column="6"
MinWidth="46"
MinHeight="23"
Style="{StaticResource EGTSTextBoxInt}"
Text="{Binding Path=Item, Mode=TwoWay,
Converter={StaticResource FormattingConverter},
ConverterParameter=\{0:G\}}" />
我想要做的就是嵌入在转换代码样式,以便我不必在每个Text =行中拼写出来。
在XAML后面添加代码以做任何事情都不是一种选择!
我在寻找纯粹的XAML方法。
我仍然试图掌握样式中某些事情是如何完成的。
布赖恩
有几种方法可以做到这一点。
但是,你甚至开始之前:
- 这是重
- 这是你的情况
1)完全无用的定义自定义标记扩展
的想法是从绑定继承标记扩展,允许你写Text ="{Binding SomeProperty}"
。
你可以找到一个自己制作绑定的人的例子here
这个解决方案不允许你把这个功能放在一个样式中。
2)定义的附加属性
将修改绑定控件的默认属性的(在你的情况下,文本是文本框的默认属性,你可以以用做<TextBox>my text</TextBox>
)你想要的转换器,自动。
这实际上可以让你把这个附加属性设置为一种风格。然而,这是非常糟糕的做法。这是一个不错的魔术弦。
3)不要这样做,只是不要。
每次写入转换器。
TextBox的Text
属性有关数据。 Style
属性是关于数据的外观。将转换器附加到样式上没有任何意义。
编辑:我想我明白你现在想说什么。你想在一个地方Text="{Binding Path=Item}"
和<Setter Property="Text" Value="~somehow get the converter in here and have it applied to the existing text property which is bound to Items~" />
作为mydogisbox提到,我不认为你可以在这样的两个地方拆分这些想法。
Converters
是一个值转换成另一种价值,所以他们不能没有它们转换
但是您可以在绑定格式的值没有转换
<TextBox Text="{Binding Path=Item, StringFormat=G}" />
使用StringFormat
值使用你也可以创建一个继承自Binding
类的类,并设置默认的StringFormat
,尽管我觉得这比它的价值更麻烦
<TextBox Text="{local:NumberBinding Path=Item}" />
如果你曾经与标签,而不是文本框时,您可以应用样式设置器,ContentStringFormat
,将格式应用于Label的Content
<Style TargetType="{x:Type Label}">
<Setter Property="ContentStringFormat" Value="G" />
</Style>
你不能在你的风格中拥有二传手的一部分。 I.E.你要么在样式中需要整个文本装订线,要么都不需要;你不能做一半。 – mydogisbox 2012-01-06 20:46:31