0

列スパンが 3 のグリッドにチェックボックスがあり、そのうちの 2 列はサイズ変更可能で、実行時にサイズ変更できます。

テキストが収まらない場合にチェックボックスに省略記号を表示したいのですが、これを機能させることができません。

これが私のXAMLコードです。

<Grid>
     <Grid.ColumnDefinitions>
          <ColumnDefinition Width="Auto" />
          <ColumnDefinition Width="*" />
          <ColumnDefinition Width="*" />
          <ColumnDefinition Width="Auto" />
     </Grid.ColumnDefinitions>
...
    <CheckBox IsEnabled="False"  Grid.Row="2" Padding="5" Margin="11,12,0,0" Name="chkSelectedCat" VerticalAlignment="Top" HorizontalAlignment="Stretch" Grid.ColumnSpan="3">
         <AccessText Text="Search in selected category only." TextTrimming="CharacterEllipsis"/>
    </CheckBox>

よろしくお願いします。

編集

問題のCheckBoxは 内にありGrid、これは 内に含まれています。GroupBoxこれは、 を使用してサイズ変更された列に隣接する列にありますGridSplitter

4

1 に答える 1

1

このMSDN フォーラム スレッドGroupBoxで説明されているように、子コントロールに無限の幅が割り当てられるという問題がありました。

実際、 a を に設定するMaxWidthCheckBox、テキストのトリミングが機能し、省略記号が表示されました。

ただし、CheckBox実行時に最大幅を変更する必要がありました。

MultiValueConverterを使用して を3 つの列の合計MaxWidthにバインドしようとしましたが、メソッドは初期化中にのみ呼び出されていました (これは、子コントロールにサイズを割り当てる方法に関係していると思います)。CheckBoxActualWidthConvertGroupBox

とにかく、 を削除し、代わりに aを使用して、すべてを で囲むことで、私が望むものを達成することができましChechkBoxた。AccessTextTextBlockStackPanelBorder

<Border Grid.Row="2" Grid.ColumnSpan="3" Name="chkBorder" SizeChanged="chkBorder_SizeChanged">
     <StackPanel Orientation="Horizontal" VerticalAlignment="Stretch">
               <CheckBox IsEnabled="False" Padding="0" Margin="11,7,0,5" Name="chkSelectedCat"  VerticalAlignment="Center"/>
               <TextBlock Foreground="Black" Name="txtChkSelectedCat" Text="Search in selected category only." TextTrimming="CharacterEllipsis" TextWrapping="NoWrap" VerticalAlignment="Center" Margin="0,5,5,5"/>
      </StackPanel>
</Border>

のサイズが変更されると、イベント ハンドラーで StackPanel のBorderを更新し、それに応じてトリム内のテキストを更新します。WidthTextBox

private void chkBorder_SizeChanged(object sender, SizeChangedEventArgs e)
{
     this.txtChkSelectedCat.Width = this.chkBorder.ActualWidth - this.chkSelectedCat.ActualWidth - 11 - 5 - 5; // margins
}

これが将来誰かに役立つことを願っています(ハックのようなものですが).

アップデート

を削除して代わりにStackPanela を使用できる場合は、以下に示すように、イベント処理を行わなくても自動的に機能します。GridTextTrimming

<Grid Grid.Row="2" Grid.ColumnSpan="3">
     <Grid.ColumnDefinitions>
          <ColumnDefinition Width="Auto" />
          <ColumnDefinition Width="*" />
     </Grid.ColumnDefinitions>
     <CheckBox Grid.Column="0" IsEnabled="False" Padding="0" Margin="11,7,0,5" Name="chkSelectedCat" VerticalAlignment="Center" ToolTipService.ShowOnDisabled="True"/>
     <TextBlock Grid.Column="1" Foreground="Black"  Name="txtChkSelectedCat" Text="Search in selected category only." TextTrimming="CharacterEllipsis" TextWrapping="NoWrap" VerticalAlignment="Center" Margin="0,5,5,5" MouseLeftButtonDown="txtChkSelectedCat_MouseLeftButtonDown" ToolTip="{Binding ElementName=chkSelectedCat, Path=ToolTip}" />
</Grid>

Widthテキストボックスを含む列の をに設定してください。これは"*""Auto"基本的に にTextBox必要なだけのスペースを確保できるため、TextTrimming機能しないためです。

于 2012-10-23T06:50:40.800 に答える