【问题标题】:Dynamically change the Visibility of a Grid in WPF在 WPF 中动态更改网格的可见性
【发布时间】:2014-04-07 09:35:50
【问题描述】:

我有一个Grid,里面有TextBlock

<Grid x:Name="GridLayout" Margin="4,0,4,1" Grid.Row="2" Background="#accdd7">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>

    <TextBlock Name="Title" 
               Grid.Row="0"
               HorizontalAlignment="Stretch"
               Padding="10,2,10,2"
               Style="{StaticResource PromptTextStyle}" />
</Grid>

我正在以编程方式设置此 TextBlock 值:

Title.Text = myObject.Title;

现在这里 myObject.Title 可能是 Null 或 Empty 有时我需要隐藏整个 Grid

如何做到这一点?

【问题讨论】:

    标签: c# wpf silverlight windows-phone-8 visibility


    【解决方案1】:

    TextBlock 上设置x:Name。然后在 Grid 的样式上应用 dataTriggers 以在 TextBlock 上将 Text 设置为 null 或空字符串时折叠可见性。

        <Grid xmlns:sys="clr-namespace:System;assembly=mscorlib"
              x:Name="GridLayout" Margin="4,0,4,1" Grid.Row="2" Background="#accdd7">
            <Grid.RowDefinitions>
               <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>
            <TextBlock x:Name="Title" 
                       Grid.Row="0"
                       HorizontalAlignment="Stretch"
                       Padding="10,2,10,2"
                       Style="{StaticResource PromptTextStyle}"/>
            <Grid.Style>
                <Style TargetType="Grid">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Text, ElementName=Title}"
                                     Value="{x:Null}">
                            <Setter Property="Visibility" Value="Collapsed"/>
                        </DataTrigger>
                        <DataTrigger Binding="{Binding Text, ElementName=Title}" 
                                     Value="{x:Static sys:String.Empty}">
                            <Setter Property="Visibility" Value="Collapsed"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Grid.Style>
        </Grid>
    

    【讨论】:

    • 你的意思是我只需要在我的xml文件中添加这个?
    • x:Name 提供给您的 textBlock,就像我在上面的示例中所做的那样。还要确保添加 sys 命名空间并在 Grid 标记下应用样式。
    • 对不起,我没明白你在说什么,你能告诉我如何处理我的代码吗?
    • 我已经更新了答案。用上面发布的替换您的 xaml。
    • 它说触发器无法识别或无法访问,我正在使用 Windows phone 8 应用程序
    【解决方案2】:

    在后面的代码中试试这个

    if(string.IsNullOrEmpty(myObject.Title))
    {
    GridLayout.Visibility = Visibility.Collapsed;
    Title.Text=string.Empty;
    }
    else
    {
    Title.Text = myObject.Title;
    GridLayout.Visibility = Visibility.Visible;
    }
    

    【讨论】:

    【解决方案3】:

    以上答案可能适用于 Windows Phone 7

    我自己解决了。

    这就是我的做法。

    在 Xaml 中使网格项的可见性默认折叠,现在在代码中检查 myObject.Title 是否为空。如果不为 null,则将网格可见性设置为可见。

    【讨论】:

    • 我在 xml 解析方面需要帮助你能帮帮我吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-26
    • 2011-05-28
    • 2013-10-14
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    相关资源
    最近更新 更多