如何仅动态展开单击的展开器?
How do I dynamically expand only the clicked expander?
我的扩展器有问题。 (再次...)
我有一个包含未知条目数的 DataGrid。每个条目都是不同的并手动添加。他们每个人都有自己所属的特定 "Area"。条目通过 "Area" 分组。分组是通过 GroupItem 进行的。在此 GroupItem 中,有一个带有 IsExpanded 绑定的扩展器。我还有一个过滤器文本框,其中的条目被过滤,只有正确的条目才会显示在组中。如果过滤器找到一个条目,那么所有 Expanders 的 isExpanded 属性 应该为真。如果过滤器未找到条目,则 isexpanded 为假。
此解决方案中的问题是:如果我单击一个 Expander,则所有 Expanders isExpanded 属性 都设置为 true,但它应该只是我单击的那个。
我知道这种行为是因为我只有 1 个多次创建的 Expander。
现在回答问题:
有没有可能只有我点击的expander打开,如果Filter找到值,所有的expander都打开?
这是属性:
public bool? FilterExpander
{
get
{
return _FilterExpander;
}
set
{
_FilterExpander = value;
RaisePropertyChanged(() => FilterExpander);
}
}
这是扩展器所在的标题样式:
<Style x:Key="GroupHeaderSettingsStyle" TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<Expander x:Name="Exp" IsExpanded="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl},Mode=FindAncestor},Path=DataContext.FilterExpander}" >
<Expander.Header>
<TextBlock Text="{Binding Name}" Foreground="White"/>
</Expander.Header>
<ItemsPresenter/>
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我希望这是可能的,并且有人可以帮助我。
提前致谢
我找到了解决办法。
我只需要将 Expander 模式设置为 "OneWay"。
这样它就可以正常工作。
这个
<expander x:name="Exp" isexpanded="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl},Mode=FindAncestor},Path=DataContext.FilterExpander}"</expander>
应该是
<expander x:name="Exp" isexpanded="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl},Mode=FindAncestor},Path=DataContext.FilterExpander, Mode=OneWay}"</expander>
我的扩展器有问题。 (再次...)
我有一个包含未知条目数的 DataGrid。每个条目都是不同的并手动添加。他们每个人都有自己所属的特定 "Area"。条目通过 "Area" 分组。分组是通过 GroupItem 进行的。在此 GroupItem 中,有一个带有 IsExpanded 绑定的扩展器。我还有一个过滤器文本框,其中的条目被过滤,只有正确的条目才会显示在组中。如果过滤器找到一个条目,那么所有 Expanders 的 isExpanded 属性 应该为真。如果过滤器未找到条目,则 isexpanded 为假。 此解决方案中的问题是:如果我单击一个 Expander,则所有 Expanders isExpanded 属性 都设置为 true,但它应该只是我单击的那个。
我知道这种行为是因为我只有 1 个多次创建的 Expander。
现在回答问题: 有没有可能只有我点击的expander打开,如果Filter找到值,所有的expander都打开?
这是属性:
public bool? FilterExpander
{
get
{
return _FilterExpander;
}
set
{
_FilterExpander = value;
RaisePropertyChanged(() => FilterExpander);
}
}
这是扩展器所在的标题样式:
<Style x:Key="GroupHeaderSettingsStyle" TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<Expander x:Name="Exp" IsExpanded="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl},Mode=FindAncestor},Path=DataContext.FilterExpander}" >
<Expander.Header>
<TextBlock Text="{Binding Name}" Foreground="White"/>
</Expander.Header>
<ItemsPresenter/>
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我希望这是可能的,并且有人可以帮助我。
提前致谢
我找到了解决办法。 我只需要将 Expander 模式设置为 "OneWay"。 这样它就可以正常工作。 这个
<expander x:name="Exp" isexpanded="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl},Mode=FindAncestor},Path=DataContext.FilterExpander}"</expander>
应该是
<expander x:name="Exp" isexpanded="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl},Mode=FindAncestor},Path=DataContext.FilterExpander, Mode=OneWay}"</expander>