2010-12-07 9 views
3

私はリストボックス内の項目をフォーマットするデータテンプレートを持つWPF、データ・テンプレートの幅

<DataTemplate x:Key="ChildViewModelTemplate"> 
    <Border BorderBrush="#FFDC1C1C" BorderThickness="1" > 
     <Grid> 
      <TextBlock Text="{Binding Path=DisplayName}"></TextBlock> 
      <Image Height="Auto" Margin="0,0,2,0" VerticalAlignment="Stretch" HorizontalAlignment="Right" Width="31" Source="pack://siteoforigin:,,,/rocket.ico"/> 
     </Grid> 
    </Border>     
</DataTemplate> 

これは、結合のTextBlockにバインドされたテキスト文字列の長さに至る各項目の周囲に境界線を置きます。

すべての要素を同じ幅にする簡単な方法はありますか?幅は最も長い要素と同じですか?ボーナスポイントについては、表示可能かどうかにかかわらず、最長の可視要素および/または最長要素に対して行う方法があるかどうか疑問です。

おかげ

答えて

3

がBotz3000の答えにフォローアップ:ここ
はそれのためのチュートリアルです。 SharedSizeGroupはここに行く方法です。これはそれを行います

<ListBox ... 
     Grid.IsSharedSizeScope="True"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="Auto" SharedSizeGroup="Col1"/> 
       </Grid.ColumnDefinitions> 
       <Border BorderBrush="#FFDC1C1C" BorderThickness="1" > 
        <Grid> 
         <TextBlock Text="{Binding Path=DisplayName}"></TextBlock> 
         <Image Height="Auto" Margin="0,0,2,0" VerticalAlignment="Stretch" HorizontalAlignment="Right" Width="31" Source="C:\C1.png"/> 
        </Grid> 
       </Border> 
      </Grid> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 
+2

ブリリアント!これは私がWPFについて今まで愛していたもので、デザイナーがまだ考えていないことを思い付くことができず、解決策を提供したような気がしません。チュートリアルは優れており、RelativeSourceについての洞察も私に与えてくれました。 – Ian

関連する問題