【问题标题】:MultiDataTrigger make stack panel children visible and colappsedMultiDataTrigger 使 stackpanel 子项可见和折叠
【发布时间】:2017-06-07 00:33:46
【问题描述】:

我有几个属性,如果这些值是真的,

如果为真,我希望堆栈面板子项可见。 如果为 false,则折叠。

据我了解,我需要使用 MultiDataTriigers 和条件。

但是我不确定将 setter 属性放在哪里折叠。

附加 ma XAML 代码:

<Style x:Key="ShowHideStyle" TargetType="StackPanel" >
        <Style.Triggers>
            <MultiDataTrigger>
            <MultiDataTrigger.Conditions>
                    <Condition Value="True">
                        <Condition.Binding>
                            <MultiBinding Converter="{StaticResource V_converter }">
                                <Binding Path="Type"></Binding>
                                <Binding Path="NodeID"></Binding>
                                <Binding Path="TLV"></Binding>
                            </MultiBinding>
                        </Condition.Binding>
                    </Condition>
                </MultiDataTrigger.Conditions>

                <MultiDataTrigger.Setters>
                    <Setter Property="Visibility" Value="Visible" />
                </MultiDataTrigger.Setters>                    
               </MultiDataTrigger>
        </Style.Triggers>
    </Style>

【问题讨论】:

  • 您似乎找到了答案,但这里有一些说明:如果您的 V_converter 正在返回可见性,请不要触发任何内容,只需转到 &lt;StackPanel.Visibility&gt;&lt;your-multibinding/&gt;&lt;/StackPanel.Visibility&gt;

标签: c# wpf setter stackpanel multidatatrigger


【解决方案1】:

是否会像以下工作 - 默认为折叠? 我的 WPF 有点生锈,但类似于以下内容:

<Style x:Key="ShowHideStyle" TargetType="StackPanel" >
    <Style.Setters>
        <Setter Property="Visibility" Value="Collapsed" />
    </Style.Setters>
    <Style.Triggers>
        <MultiDataTrigger>
        <MultiDataTrigger.Conditions>
                <Condition Value="True">
                    <Condition.Binding>
                        <MultiBinding Converter="{StaticResource V_converter }">
                            <Binding Path="Type"></Binding>
                            <Binding Path="NodeID"></Binding>
                            <Binding Path="TLV"></Binding>
                        </MultiBinding>
                    </Condition.Binding>
                </Condition>
            </MultiDataTrigger.Conditions>

            <MultiDataTrigger.Setters>
                <Setter Property="Visibility" Value="Visible" />
            </MultiDataTrigger.Setters>                    
           </MultiDataTrigger>
    </Style.Triggers>
</Style>

注意第二行和可见性设置器下方的行。

【讨论】:

  • 当我复制这段代码时,一切都被折叠了。并且不受属性影响。
【解决方案2】:

您可以使用 MultiBinding 绑定到多个属性,并将 StackPanel 的 Visibility 属性设置为 Visible,前提是实现 IMultiValueConverter 接口的转换器类返回 true:

<Style x:Key="ShowHideStyle" TargetType="StackPanel">
    <!-- default Visibility: -->
    <Setter Property="Visibility" Value="Collapsed" />
    <Style.Triggers>
        <DataTrigger Value="True">
            <DataTrigger.Binding>
                <MultiBinding Converter="{StaticResource V_converter}">
                    <Binding Path="Type" />
                    <Binding Path="NodeID" />
                    <Binding Path="TLV" />
                </MultiBinding>
            </DataTrigger.Binding>
            <Setter Property="Visibility" Value="Visible" />
        </DataTrigger>
    </Style.Triggers>
</Style>

【讨论】:

  • 当我复制这段代码时,一切都被折叠了。并且不受属性影响。
  • 你的转换器类是如何实现的?当 StackPanel 应该可见时它是否返回 true?
  • 它返回 System.Windows.Visibility.Visible
  • 然后更改 DataTrigger 的值:。或者更好的是从转换器返回一个布尔值(真或假)。
  • 但是我希望它能做到。是折叠所有的孩子,它只是隐藏他们。
猜你喜欢
  • 1970-01-01
  • 2011-03-17
  • 1970-01-01
  • 2017-01-15
  • 1970-01-01
  • 2014-05-28
  • 2018-05-05
  • 2013-11-08
  • 1970-01-01
相关资源
最近更新 更多