0

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

这是我的例子:

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

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

谢谢!帕特里克·米隆

4

1 回答 1

0

尝试使用这样的附加属性

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>

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

于 2012-06-15T14:56:07.347 回答