2016-10-05 2 views
2

私はリストビュー内のテキストをセルの上部に揃えようとしています。GridViewRowPresenter内でContentPresenterプロパティをどのように設定しますか?

これは私がこれまで何をやったかである:

データは次のようにバインドされます。

<ListView.ItemContainerStyle> 
<Style TargetType="ListViewItem"> 
<Setter Property="VerticalAlignment" Value="Stretch"/> 
<Setter Property="Template"> 
    <Setter.Value> 
    <ControlTemplate TargetType="ListViewItem"> 
     <Grid> 
     <GridViewRowPresenter VerticalAlignment="Stretch"> 
      <GridViewRowPresenter.Resources> 
      <Style TargetType="ContentPresenter"> 
       <Setter Property="Margin" Value="1"/> 
       <Setter Property="VerticalAlignment" Value="Stretch"/> 
      </Style> 
      </GridViewRowPresenter.Resources> 
     </GridViewRowPresenter> 
     </Grid> 
    </ControlTemplate> 
    </Setter.Value> 
</Setter> 

ItemContainerは、次のようにスタイル設定され

<ListView.View> 
    <GridView> 
    <GridViewColumn Width="50"> 
     <GridViewColumn.CellTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding RelativeSource={RelativeSource FindAncestor, 
             AncestorType={x:Type ListViewItem}}, 
            Converter={StaticResource lviIndexToString}}" 
        Foreground="White" 
        VerticalAlignment="Top"/> 
     </DataTemplate> 
     </GridViewColumn.CellTemplate> 
    </GridViewColumn> 
    <GridViewColumn Width="80"> 
     <GridViewColumn.CellTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding LogTime}" 
        Foreground="{StaticResource ConsoleOrange}"/> 
     </DataTemplate> 
     </GridViewColumn.CellTemplate> 
    </GridViewColumn> 
    <GridViewColumn Width="80"> 
     <GridViewColumn.CellTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding MessageType}" 
        Foreground="{Binding MessageType, 
         Converter={StaticResource logMsgToColor}}"/> 
     </DataTemplate> 
     </GridViewColumn.CellTemplate> 
    </GridViewColumn> 
    <GridViewColumn DisplayMemberBinding="{Binding Path=Message}"/> 
    </GridView> 
</ListView.View> 

ContentPresenters VerticalAlignmentが 'Stretch'に設定されている場合に機能します。しかし、視覚的な木は、ContentPresenterスタイルが何かによってオーバーライドされていることを明らかにしていますが、私の人生は何によるのか理解できません。 enter image description here

誰もがネストされたContentPresentersのプロパティを設定したり、データを表示する方法をより詳細に制御を持っているカスタムGridViewRowPresenterを設定する方法で私を教育する方法任意のアイデアを持っている場合は、私が最もGREATFULだろう。

これは他の場所で回答されていますが、私のgoogle-fu検索(およびここでの検索)では役に立たない解決策が明らかにされていないとお詫び申し上げます。

更新 最後の目標は、最初の3列のテキストをListViewItemの先頭に揃えることです。 enter image description here

+2

簡単な言葉で、または画像で説明しようとしています。 – AnjumSKhan

+0

GridViewRowPresenter内でContentPresenters VerticalAlignmentをストレッチに設定したい – andidegn

+0

私は実際の要件をur listviewに求めています。 – AnjumSKhan

答えて

4

VerticalAlignmentプロパティContentPresenterの値を上書きするには、我々はいくつかの優先順位の高いステップでそれを設定する必要があります。アニメーションはprecedence orderに2位を保持します。

<ListView.Resources> 
    <Style TargetType="ContentPresenter"> 
     <Style.Triggers> 
      <EventTrigger RoutedEvent="Loaded"> 
       <BeginStoryboard> 
        <Storyboard > 
         <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="VerticalAlignment"> 
          <DiscreteObjectKeyFrame KeyTime="0:0:0"> 
           <DiscreteObjectKeyFrame.Value> 
            <VerticalAlignment>Top</VerticalAlignment> 
           </DiscreteObjectKeyFrame.Value> 
          </DiscreteObjectKeyFrame> 
         </ObjectAnimationUsingKeyFrames> 
        </Storyboard> 
       </BeginStoryboard> 
      </EventTrigger> 
     </Style.Triggers> 
    </Style> 
</ListView.Resources> 

もう1つの方法は、ContentPresenter.Loadedイベントを処理し、そこでプロパティ値を設定することです。

<Style TargetType="ContentPresenter"> 
     <EventSetter Event="Loaded" Handler="ContentPresenter_Loaded"/> 
    </Style> 

ハンドラ:

void ContentPresenter_Loaded(object sender, RoutedEventArgs e) 
{ 
    (sender as ContentPresenter).VerticalAlignment = System.Windows.VerticalAlignment.Bottom; 
} 

Loadedイベントハンドラを使用して、プロパティのこの変化があまりにもBlend Behaviors/Attached Propertyを使用して行うことができます。

+0

あなたはスターです!ありがとうございました。これは魅力的に機能しました。 – andidegn

+0

@andidegnありがとう、あなたの問題の関連するポイントの説明を投稿してみてください。これは役に立ちます。 – AnjumSKhan

+0

すみません。私は書いていたと思った: "私はリストビュー内のテキストをセルの上部に揃えようとしています。" と "ネストされたContentPresentersプロパティを設定する方法を知っている人がいれば..." – andidegn

関連する問題