通过一个变量设置XAML中多个元素的可见性

时间:2018-09-03 08:34:57

标签: wpf

在设计时,我希望能够控制多个组件的可见性,我希望能够从单个属性控制所有isHidden。 到目前为止,我的代码看起来像这样

ignoreable="e d"
<StackPanel d:IsHidden=true>
...
</StackPanel>
<StackPanel e:IsHidden=false>
...
</StackPanel>
<StackPanel d:IsHidden=true>
...
</StackPanel>
<StackPanel e:IsHidden=false>
...
</StackPanel>

是否可以通过单个变量控制所有面板的可见性?

所以看起来像这样

<StackPanel d:IsHidden=isVisibleVar>
...
</StackPanel>
<StackPanel e:IsHidden=isVisibleVarOther>
...
</StackPanel>

我知道转换器。我知道如何在运行时执行此操作,我想要一种快速的方法来从一个位置在两组可见性之间进行切换,而不是搜索和替换

2 个答案:

答案 0 :(得分:0)

找到了解决方法。 为每个组使用一种样式。那么我只需要在两个位置设置可见性即可。

<Style x:Key="MainButtonStyle" 
                       TargetType="Button"
                       BasedOn= "{StaticResource BasicButton}">
                        <Setter Property="Visibility" Value="Visible"></Setter>
</Style>

 <Style x:Key="SecButtonStyle" 
                       TargetType="Button"
                       BasedOn= "{StaticResource BasicButton}">
                        <Setter Property="Visibility" Value="Hidden"></Setter>
</Style>

答案 1 :(得分:0)

我的回答可能不是那么复杂,并且不只使用“单个变量” ,而是可以解决问题的(使用两个变量)。


因此,首先在XAML中定义两个变量。例如,直接在Window.Resources中,例如:

<Window ...
        xmlns:system="clr-namespace:System;assembly=mscorlib"
        mc:Ignorable="d"
        >

    <Window.Resources>
        <system:Boolean x:Key="ShowInDemoMode">False</system:Boolean>
        <system:Boolean x:Key="HideInDemoMode">True</system:Boolean>
    </Window.Resources>

    ...

</Window>

或-如果您有一个-的样式为ResourceDictionary

<ResourceDictionary ...
                    xmlns:system="clr-namespace:System;assembly=mscorlib"
                    >

    <system:Boolean x:Key="ShowInDemoMode">False</system:Boolean>
    <system:Boolean x:Key="HideInDemoMode">True</system:Boolean>

    ...

</ResourceDictionary>

然后您可以像这样使用两者:

<StackPanel d:IsHidden="{StaticResource HideInDemoMode}">
    ...
</StackPanel>
<StackPanel d:IsHidden="{StaticResource ShowInDemoMode}">
    ...
</StackPanel>
<StackPanel d:IsHidden="{StaticResource HideInDemoMode}">
    ...
</StackPanel>
<StackPanel d:IsHidden="{StaticResource ShowInDemoMode}">
    ...
</StackPanel>

使用此静态资源,您可以通过更改这两个资源的值轻松地在StackPanel项目的可见性之间切换。


备注:
d:IsHidden设置为truefalse仅在DesignTime中有效,并且将在运行您的应用程序时显示项目,这与your answer有很大的区别。