0

非常に大きなグリッドがあり、以下にXAMLの一部を表示していますが、値が空の場合、行にテキストブロックが表示されないはずです。
どうすればそれを作成できますか?

<Grid x:Name="JobDetailGrid">
   <Grid.RowDefinitions>
      <RowDefinition Height="Auto"/>
      <RowDefinition Height="Auto"/>
      <RowDefinition Height="Auto"/>
   </Grid.RowDefinitions>
   <Grid.ColumnDefinitions>
      <ColumnDefinition Width="Auto"/>
      <ColumnDefinition Width="10" />
      <ColumnDefinition Width="*"/>
   </Grid.ColumnDefinitions>
   <TextBlock Grid.Row="0" Grid.Column="0" x:Uid="JobDetailTaskType" />
   <TextBlock Grid.Row="0" Grid.Column="2" x:Uid="JobDetailTaskTypeSrv" Text="{Binding TaskType}" />
   <TextBlock Grid.Row="1" Grid.Column="0" x:Uid="JobDetailStatus" />
   <TextBlock Grid.Row="1" Grid.Column="2" x:Uid="JobDetailStatusSrv" Text="{Binding Status}" />
   <TextBlock Grid.Row="4" Grid.Column="0" x:Uid="JobDetailApproved" />
   <TextBlock Grid.Row="4" Grid.Column="2" x:Uid="JobDetailApprovedSrv" Text="{Binding Approved}" />

おそらくC#でそれを行うことができますが、Bindingを作成したり、StackPanelを作成したりできるかどうかを考えていますが、StackPanelの問題は、各TextBlockの後にマージンを作成する必要があることです。

または、この目的のために独自のユーザーコントロールを作成する必要がありますか?

4

1 に答える 1

1

これはバインディングを介して簡単に行うことができます!文字列を受け取り、可視性を返すコンバーターを作成する必要があります(したがって、空の文字列はテキストボックスを非表示にします)。次に、テキストブロックの可視性を次のように設定します。

<TextBlock Grid.Row="0" Grid.Column="0" x:Uid="JobDetailTaskType" Visibility={Binding TaskType, Converter={StaticResource visibilityConverter}}/>

Place the visibility on both the textblock's (the label and the value), and since you have the height to auto you shouldn't need to mess about with margins.

于 2012-12-26T15:55:46.247 に答える