1

私はこのようなグリッドを持っています:

<Grid>
   <Grid.RowDefinitions>
     <RowDefinition />
     <RowDefinition />
   </Grid.RowDefinitions>
   <TextBlock  Grid.Row="1"  Margin="12,0,0,10" x:Name="TxtBox_Email"  Text="{Binding m_strMail}"  />
</Grid>

バインドされた変数が空の場合、グリッド全体を非表示にします。コンバーターを使用する必要があると思いますが、構文についてはいくつかのヘルプが必要です。

誰か助けてくれませんか?

どうもありがとう :)

4

3 に答える 3

3

ええ、あなたは正しいです。次のようにコンバーターを作成できます。

public class StringLengthVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter,
    System.Globalization.CultureInfo culture)
    {
        var strValue = value as String;
        return string.IsNullOrEmpty(strValue) ? Visibility.Collapsed : Visibility.Visible;
    }

    public object ConvertBack(object value, Type targetType, object parameter,
    System.Globalization.CultureInfo culture)
    {
        //We can't support this
        throw new NotImplementedException();
    }
}

コンバーターを使用するには、ページにリソースを追加します。

<phone:PhoneApplicationPage.Resources>
    <local:StringLengthVisibilityConverter x:Key="LengthConverter" />
</phone:PhoneApplicationPage.Resources>

コンバーターlocalの CLR 名前空間を指す xmlns に置き換えます。

その後、グリッドでコンバーターを使用できます。

<Grid Visibility="{Binding Path=m_strMail, Converter={StaticResource LengthConverter}}" />
于 2013-01-06T20:52:17.553 に答える
0

グリッドのスタイルを作成する場合は、xamlでのみ書き込むことができます。ただし、異なるバインディングごとにスタイルを作成する必要があります。この例のViewmodelには、MyStringという名前の文字列Propertyが含まれているだけです。

<Window xmlns:local="clr-namespace:PlayGroundSecond">
    <Window.DataContext>
        <local:SimpleViewModel/>
    </Window.DataContext>

    <Window.Resources>
        <Style x:Key="MyOwnTextBlockStyle" TargetType="{x:Type TextBlock}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding MyString}" Value="{x:Null}">
                    <Setter Property="Visibility" Value="Collapsed"/>
                </DataTrigger>
                <DataTrigger Binding="{Binding MyString}" Value="">
                    <Setter Property="Visibility" Value="Collapsed"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>
    <Grid>
        <TextBlock Style="{StaticResource MyOwnTextBlockStyle}" Text="MyText"/>
    </Grid>
</Window>

vcsjonesのソリューションの方が優れていると思います。これは、すべてのバインディングに使用でき、私のソリューションでは、バインディングごとに2つのDataTriggersを使用してスタイルを作成する必要があるためです。

于 2013-01-08T05:29:14.127 に答える
0

Converter がなければ、このように使用できます

        <Grid>
            <Grid.Style>
                <Style>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Path=m_strMail}" Value="">
                            <Setter Property="FrameworkElement.Visibility" Value="Collapsed" />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Grid.Style>
            <Grid.RowDefinitions>
                <RowDefinition />
                <RowDefinition />
            </Grid.RowDefinitions>
            <TextBlock  Grid.Row="1"  Margin="12,0,0,10" x:Name="TxtBox_Email"  Text="{Binding m_strMail}"  />
        </Grid>
于 2013-10-29T11:06:04.657 に答える