如果用户手动展开,WPF DataTrigger将停止将IsExpanded应用于扩展器
如果VM中设置了标志,我希望扩展器进行扩展。我还希望用户能够覆盖此选项并随意展开/折叠。以下代码不起作用,计时器启动,扩展器反复展开和折叠-然后如果手动单击扩展器,它也会切换-但触发器无法展开或折叠扩展器。当然,这就好像设置了手动键控值,并且优先于触发器设置器如果用户手动展开,WPF DataTrigger将停止将IsExpanded应用于扩展器,wpf,triggers,datatrigger,expander,Wpf,Triggers,Datatrigger,Expander,如果VM中设置了标志,我希望扩展器进行扩展。我还希望用户能够覆盖此选项并随意展开/折叠。以下代码不起作用,计时器启动,扩展器反复展开和折叠-然后如果手动单击扩展器,它也会切换-但触发器无法展开或折叠扩展器。当然,这就好像设置了手动键控值,并且优先于触发器设置器 <Expander Header="Test" BorderThickness="2" BorderBrush="Black" VerticalAlignment="Bottom"> <Expander.Style
<Expander Header="Test" BorderThickness="2" BorderBrush="Black" VerticalAlignment="Bottom">
<Expander.Style >
<Style TargetType="Expander">
<Setter Property="IsExpanded" Value="True"></Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding DataContext.AmSet,
RelativeSource={RelativeSource AncestorType=Grid}}"
Value="True">
<Setter Property="IsExpanded" Value="False"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</Expander.Style>
<Expander.Content>
<Border Background="AliceBlue" Width="50" Height="50"></Border>
</Expander.Content>
您需要使用DataTrigger执行此操作有什么原因吗?它可以通过双向绑定轻松实现
我简化了代码,实际代码中的AmSet实际上是一个枚举-我想使用不同的枚举值来控制扩展器何时自动打开和关闭。我希望这是在XAML和关闭视图模型。在虚拟机中封装相同功能并绑定到IsExpanded的布尔值是否适合逻辑,这是有争议的,并且您建议的效果很好,这可能是我将要做的,但我仍然想知道为什么触发器停止工作?
public class vm : INotifyPropertyChanged
{
public vm()
{
t = new System.Timers.Timer(1000);
t.Elapsed += t_Elapsed;
t.Start();
}
bool _AmSet = false;
public bool AmSet
{
get { return _AmSet; }
set
{
_AmSet = value;
OnPropertyChanged("");
}
}
void t_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
AmSet = !AmSet;
}
System.Timers.Timer t;
private void OnPropertyChanged(string prop)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(prop));
}
public event PropertyChangedEventHandler PropertyChanged;
}