M. *_*ley 3 wpf datatrigger ivalueconverter
我一直在使用带数据触发器的值转换器时遇到问题.在我的一些代码,它似乎像DataTrigger的Path被应用到根元素,而不是风格适用于哪些元素.
我创建了一个简单的测试用例,我不明白它的行为.我希望它Button会变成红色或蓝色,具体取决于输入到DataTrigger转换器的值,但它Button根本没有受到影响!
<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:SimpleWpfApplication"
x:Class="SimpleWpfApplication.SimpleUserControl"
ToolTip="UserControl ToolTip">
<UserControl.Resources>
<local:SimpleConverter x:Key="SimpleConverter" />
</UserControl.Resources>
<Button ToolTip="Button ToolTip">
<Button.Style>
<Style TargetType="{x:Type Button}">
<Style.Triggers>
<DataTrigger
Binding="{Binding Path=ToolTip, Converter={StaticResource SimpleConverter}}"
Value="Button ToolTip">
<Setter Property="Background" Value="Red" />
</DataTrigger>
<DataTrigger
Binding="{Binding Path=ToolTip, Converter={StaticResource SimpleConverter}}"
Value="UserControl ToolTip">
<Setter Property="Background" Value="Blue" />
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
</UserControl>
Run Code Online (Sandbox Code Playgroud)
一个简单的转换器:
class SimpleConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new InvalidOperationException("SimpleConverter is a OneWay converter.");
}
}
Run Code Online (Sandbox Code Playgroud)
为什么不Convert被召唤?为什么不Button转红色或蓝色?
在另一个StackOverflow问题中找到答案:我的datatrigger绑定有什么问题?
答案是添加RelativeSource={RelativeSource Self}到绑定:
<DataTrigger Binding="{Binding Path=ToolTip,
RelativeSource={RelativeSource Self},
Converter={StaticResource SimpleConverter}}" />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4910 次 |
| 最近记录: |