【问题标题】:Conditionally create view in XAML?有条件地在 XAML 中创建视图?
【发布时间】:2017-12-02 12:54:05
【问题描述】:

我的视图可能会根据代码隐藏或视图模型中的布尔条件在 xaml 中创建,也可能不会。

我想做这样的事情:

<AlwaysVisibleView />

<IfShowSometimesViewBindingOrVariableOrSomething>
<SometimesView AProperty="something"/>
</IfShowSometimesViewBindingOrVariableOrSomething>

我想尽可能地避免代码隐藏和其他类似的技巧,最后理想情况下我不希望实例化视图。

【问题讨论】:

  • 您可以使用 ContentPresenter,请参阅 stackoverflow.com/questions/9359364/… 的答案 可能仅当您可以在运行时更改属性时才应使用此解决方案。我想如果控件在运行时不改变,那么在代码隐藏中附加一个孩子是可以的。

标签: wpf xaml


【解决方案1】:

视图的动态创建有时会有点棘手。此外,它们往往会弄乱 XAML 呈现事物的方式。

您可以将“有时可见视图”的可见性绑定到属性吗?您可以通过布尔到可见性转换器运行它,只需让后面的代码切换布尔以显示/隐藏。

Example thread

【讨论】:

    【解决方案2】:

    您可以使用ContentControlStyle.Triggers 根据属性更改内容和可见性(例如:bool ShowMe):

    <ContentControl>
        <ContentControl.Style>
            <Style TargetType="ContentControl">
                <Setter Property="Content" Value="{x:Null}"/>
                <Setter Property="Visibility" Value="Collapsed"/>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ShowMe}" Value="True">
                        <Setter Property="Content">
                            <Setter.Value>
                                <SometimesView AProperty="something"/>
                            </Setter.Value>
                        </Setter>
                        <Setter Property="Visibility" Value="Visible"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </ContentControl.Style>
    </ContentControl>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 2018-02-17
      • 1970-01-01
      • 2019-10-24
      • 2014-09-03
      相关资源
      最近更新 更多