gpt4 book ai didi

wpf - 如何在样式而不是路径中设置转换器?

转载 作者:行者123 更新时间:2023-12-04 21:45:05 26 4
gpt4 key购买 nike

我正在尝试为我希望能够在我的代码中使用的文本框创建一个样式。我的样式在 Text 属性的绑定(bind)中定义了一个转换器,但没有设置它的路径,因为无论我在哪里使用这种样式,我的绑定(bind)数据的名称都可能不同。

<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}"/>

当我写上面的代码时,我得到一个提示“双向绑定(bind)需要 Path 或 XPath。”。

我什至尝试创建一个在样式绑定(bind)中使用的附加属性以在样式中反射(reflect)此值,但我也无法工作。看下一个:

<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 创建具有自己的默认转换器的自定义控件应该很容易...我很困惑!

最佳答案

您可以创建一个 UserControl 来非常简单地执行此操作:

<UserControl x:Class="namespace.MyCustomConverterTextBox">
<TextBlock Text="{Binding Text, Converter={StaticResource yourconverter}}"/>
</UserControl>

然后在代码隐藏中将 Text 声明为 DependencyProperty:

public partial class MyCustomConverterTextBox : UserControl
{
public string Text {
get{return (string) GetValue(TextProperty);}
set{SetValue(TextProperty, value);}
}

public static readonly DependencyProperty TextProperty =
DependencyProperty.Register("Text", typeof(string), typeof(MyCustomConverterBox));
}

这应该足以让您在 xaml 中使用它:

<local:MyCustomConverterTextBox Text="{Binding YourBinding}" />

我没有运行这段代码,所以可能会有拼写错误,但它应该足以让您了解如何去做。

关于wpf - 如何在样式而不是路径中设置转换器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11121828/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com