如何在没有路径的样式的绑定中使用 IValueConverter,让每个控件在设计时分配路径



我正在尝试创建一种样式,该样式将附加一个转换器,以便当我使用此样式时,它将自动使用转换器。我遇到的问题是,如果我不在样式中设置路径,编译器就不喜欢它。我不想在样式中设置绑定的"Path"属性,因为我想在设计时选择路径。并非所有控件都会自动使用相同的路径名。

这是我的例子:

<Style x:Key="SomeCustomTextBox" BasedOn="{StaticResource {x:Type TextBox}}" TargetType="{x:Type TextBox}">
    <Setter Property="Text">
        <Setter.Value>
            <Binding>
                <Binding.Path>SomePath</Binding.Path>
                <Binding.Converter>
                    <Converters:SomeIValueConverter/>
                </Binding.Converter>
            </Binding>
        </Setter.Value>
    </Setter>
</Style>

此外,如果我在 xaml 代码的下一行(此处为下面)中使用类似样式,它会自动覆盖整个绑定,而不仅仅是绑定路径。

<TextBox Height="28" Name="someNameThatOveridesDefaultPath" Style="{StaticResource SomeCustomTextBox}" MaxLength="5" />

有没有可能以某种方式做这样的事情?

谢谢!帕特里克·米龙

尝试使用这样的附加属性

public class AttachedProperties
{
    public static readonly DependencyProperty RawTextProperty = DependencyProperty.RegisterAttached(
        "RawText",
        typeof(string),
        typeof(AttachedProperties));
    public static void SetRawText(UIElement element, string value)
    {
        element.SetValue(RawTextProperty, value);
    }
    public static string GetRawText(UIElement element)
    {
        return element.GetValue(RawTextProperty) as string;
    }
}

然后在你的 XAML 中

<Style x:Key="SomeCustomTextBox" BasedOn="{StaticResource {x:Type TextBox}}" TargetType="{x:Type TextBox}">
    <Setter Property="Text" Value="{Binding RelativeSource={RelativeSource Mode=Self}, 
    Path=local:AttachedProperties.RawText, Converter=Converters:SomeIValueConverter}">
    </Setter>
</Style>

<Grid>
    <TextBox Style="{StaticResource SomeCustomTextBox}" 
                local:AttachedProperties.RawText="test text" />
</Grid>

我还没有测试过代码,但这就是这个想法

相关内容

  • 没有找到相关文章

最新更新