我正在尝试为我希望能够在我的代码中使用的文本框创建一种样式。我的样式在 Text 属性的绑定中定义了一个转换器,但没有设置它的路径,因为无论我在哪里使用此样式,我的绑定数据的名称都可能不同。
<Style x:Key="CustomTextBox" BasedOn="{StaticResource {x:Type TextBox}}"
TargetType="{x:Type TextBox}">
<Setter Property="Text">
<Setter.Value>
<Binding>
<Binding.Converter>
<CustomTextBoxConverter/>
</Binding.Converter>
</Binding>
</Setter.Value>
</Setter>
</Style>
然后 customTextBox 将像这样使用:
<TextBox Height="28" Name="txtRate" Style="{StaticResource CustomTextBox}"
MaxLength="5" Text="{Binding Path=BoundData}"/>
当我编写上面的代码时,我得到一个“双向绑定需要 Path 或 XPath。”的执行。
我什至尝试创建一个在样式绑定中使用的附加属性,以在样式中反映这个值,但我也无法工作。见下:
<Converters:SomeConvertingFunction x:Key="CustomTextConverter"/>
<local:CustomAttachedProperties.ReflectedPath x:Key="ReflectedPath"/>
<Style x:Key="CustomTextBox" BasedOn="{StaticResource {x:Type TextBox}}"
TargetType="{x:Type TextBox}">
<Setter Property="Text">
<Setter.Value>
<Binding Path=ReflectedPath Converter=CustomTextConverter/>
</Setter.Value>
</Setter>
</Style>
在这样的页面中使用:
<TextBox Height="28" Name="txtRate" Style="{StaticResource CustomTextBox}"
MaxLength="5" CustomAttachedProperty="contextBoundDataAsString"/>
附加属性的代码是:
Public Class CustomAttachedProperties
Public Shared ReadOnly ReflectedPathProperty As DependencyProperty =
DependencyProperty.RegisterAttached("ReflectedPath", GetType(String),
GetType(CustomAttachedProperties))
Public Shared Sub SetReflectedPath(element As UIElement, value As String)
element.SetValue(ReflectedPathProperty, value)
End Sub
Public Shared Function GetReflectedPath(element As UIElement) As String
Return TryCast(element.GetValue(ReflectedPathProperty), String)
End Function
End Class
当我尝试使用上面的代码时,它编译得很好,但它似乎没有在我的 XAML 上做任何事情,就像它可能正在创建 CustomAttachedProperty 的不同实例一样。
抱歉这个冗长的问题,但我认为创建自定义控件应该很容易,这些控件具有自己的 WPF 默认转换器......我很困惑!