各アイテムがTextBoxを印刷するItemsControlで構成されるListBoxを持っています。WPF水平に積み重ねられたTextLimming TextBlocksを使用したItemsControl
<Window.Resources>
<DataTemplate x:Key="ItemTemplate">
<Grid Margin="0,0,0,0">
<ItemsControl
ItemsSource="{Binding Collection2}"
ItemTemplate="{DynamicResource SubItemTemplate}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"></StackPanel>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</Grid>
</DataTemplate>
</Window.Resources>
<Grid ShowGridLines="True" DataContext="{Binding Source={StaticResource SampleDataSource}}">
<ListBox x:Name="listBox"
HorizontalAlignment="Left"
Width="280"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ItemTemplate="{DynamicResource ItemTemplate}"
ItemsSource="{Binding Collection1}"/>
</Grid>
のItemsControlリストがカットオフされますabrubtly私は、リストボックスで無効になっHorizontalScrollBarVsibilityを持っているので。今、TextBoxes TextTrimmingプロパティを使用して、リストの最後にドットを残して、テキストがカットオフされ、グリッドの後ろに隠れるようにします。私は何も結果なしで、次のItemTemplateにを使用してこれを実行しよう
:下の図の赤い点として示さ
<DataTemplate x:Key="SubItemTemplate">
<Border BorderThickness="1" BorderBrush="Black">
<TextBlock Margin="5, 0, 5, 0"
TextTrimming="CharacterEllipsis"
Text="{Binding Name}">
</TextBlock>
</Border>
</DataTemplate>
私の質問は:どのように私はTextTrimmingの機能を実現することができます上記の図のように水平に積み重ねられたリスト?
私は次のような構造でVisual Studioのブレンドを使用してサンプルデータを使用しました:
- SampleDataSource(データコンテキスト)
- Collection1:(コレクション)
- コレクション2:(コレクション)
- 名前:(文字列)
- コレクション2:(コレクション)
- Collection1:(コレクション)
を更新2016年12月13日
は、私は、外部スタイルとしてtexttrimmingを設定しようと、私は提案のようなボーダー、TextBlockのとのStackPanel(両方でMaxWidthの設定しようとしましたコメントで)。それ以外にも、私はTextBlock内のItemsControl全体をラップし、その上にTextTrimmingプロパティを配置しようとしました。これのどれも不幸にも結果をもたらしませんでした。私は基本的にこれは、O iが提供するコード例を簡素化したいんすべてのことが関連している:(赤い点は私が達成したいものを可視化されている)、このようになります
<Grid>
<StackPanel Width="150" Orientation="Horizontal">
<TextBlock TextTrimming="CharacterEllipsis" Text="This is textbox1"/>
<TextBlock TextTrimming="CharacterEllipsis" Text="This is textbox2"/>
</StackPanel>
</Grid>
:
ここでは、2つのテキストブロックをマージし、代わりに「実行」を使用することができますが、これは私の「本当の」問題には当てはまりません。
アップデート2017年2月24日
この溶液を(余分なスペースとマージンに注意してください)コメントで提案されました:
次を生成<Window.Resources>
<Style x:Key="TextStyle" TargetType="TextBlock">
<Setter Property="TextTrimming" Value="CharacterEllipsis"/>
<Setter Property="Margin" Value="0, 0, -1, 0"/>
</Style>
</Window.Resources>
<Grid>
<DockPanel>
<TextBlock Style="{StaticResource TextStyle}" Text="This is textbox1 "/>
<TextBlock Style="{StaticResource TextStyle}" Text="This is textbox2 "/>
<TextBlock Style="{StaticResource TextStyle}" Text="This is textbox3 "/>
</DockPanel>
</Grid>
:
また、余白にはさまざまな量のスペースと異なる値を試しました必要な結果のないテキストブロック。だから正解は私の問題を完全には解決しません。
外部のスタイルを試しましたか?次のように考えてみましょう: 'Window.Resource> Text Trimming Properties>' 'TextTlockate = "/>' DataTemplateがVisualTreeの一部ではないことから、あなたが適用したスタイルは評価されません。それがどうなるか教えてください。 –
XAMlMAX
'ItemsPanelTemplate'を次のように置き換えてみてください:' トリミングを呼び出すためのパネル境界を提供していないだけですが、今はテストする時間がありません。 :) –
@ XAMlMAX Chris Wあなたのコメントをありがとう、残念ながらそれは動作しませんでした。あなたが喜んでいるなら私の更新を見てください。 – micnil