在WPF中动态更改网格的可见性

时间:2014-03-05 11:02:55

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

我有一个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有时可能为空或空,我需要隐藏整个Grid

如何实现这一目标?

3 个答案:

答案 0 :(得分:4)

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

    <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>

答案 1 :(得分:1)

后面的代码中试试这个
if(string.IsNullOrEmpty(myObject.Title))
{
GridLayout.Visibility = Visibility.Collapsed;
Title.Text=string.Empty;
}
else
{
Title.Text = myObject.Title;
GridLayout.Visibility = Visibility.Visible;
}

答案 2 :(得分:0)

上面的答案可能适用于Windows Phone 7

我自己解决了。

这是我的表现。

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