Wpf 禁用扩展器时折叠扩展器
我有一个扩展器,我希望用户能够扩展/折叠。但是,我想在IsEnabled设置为false时折叠扩展器 这项工作:Wpf 禁用扩展器时折叠扩展器,wpf,Wpf,我有一个扩展器,我希望用户能够扩展/折叠。但是,我想在IsEnabled设置为false时折叠扩展器 这项工作: myExpander.IsEnabledChanged += (sender, e) => { if (!((Expander)sender).IsEnabled) ((Expander)sender).IsExpanded = false; }; 但我希望有一个更干净的解决方案,可能是一种风格或一种装订 我试过: <Style x:Key="NotesExp
myExpander.IsEnabledChanged += (sender, e) =>
{
if (!((Expander)sender).IsEnabled) ((Expander)sender).IsExpanded = false;
};
但我希望有一个更干净的解决方案,可能是一种风格或一种装订
我试过:
<Style x:Key="NotesExpander" TargetType="Expander" >
<Setter Property="IsExpanded" Value="True" />
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="IsExpanded" Value="False" />
</Trigger>
</Style.Triggers>
</Style>
在用户以交互方式展开设置之前,它一直有效。一旦用户单击手动展开,样式就不再提供IsExpanded的值
有什么建议吗
关于David这是一个依赖项属性设置优先级的问题(例如读取和)。 一旦用户以交互方式更改IsExpanded,此值的优先级将高于样式触发器 一个可能的解决办法是沿着这些思路 将PreviewMouseDown=“exp_PreviewMouseDown”添加到扩展器中。 在此事件处理程序中,使用DependencyObject.SetCurrentValue更新值,而不是让扩展器更新值本身(这将覆盖样式触发器):
这是一个依赖项属性设置优先级的问题(读取例如and)。 一旦用户以交互方式更改IsExpanded,此值的优先级将高于样式触发器 一个可能的解决办法是沿着这些思路 将PreviewMouseDown=“exp_PreviewMouseDown”添加到扩展器中。 在此事件处理程序中,使用DependencyObject.SetCurrentValue更新值,而不是让扩展器更新值本身(这将覆盖样式触发器):
非常感谢您的链接。我知道发生了什么-现在我知道为什么了!非常感谢您的链接。我知道发生了什么-现在我知道为什么了!
private void exp_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
var exp = sender as Expander;
exp.SetCurrentValue(Expander.IsExpandedProperty, !exp.IsExpanded);
e.Handled = true;
}