我正在尝试创建一种样式,该样式将附加一个转换器,以便当我使用此样式时,它将自动使用转换器。我遇到的问题是,如果我不在样式中设置路径,编译器就不喜欢它。我不想在样式中设置绑定的"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>
我还没有测试过代码,但这就是这个想法