2016-10-05 2 views
2

ListView 내부의 텍스트를 셀의 위쪽에 정렬하려고합니다.GridViewRowPresenter에서 ContentPresenter 속성을 어떻게 설정합니까?

데이터는 다음과 같이 바인딩 :

<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> 

ItemContainer이 같은 스타일입니다 :

<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> 

내가 지금까지 한 일이다 ContentPresenters VerticalAlignment가 'Stretch'로 설정된 경우 작동합니다. 그러나 시각적 트리는 ContentPresenter 스타일이 무언가에 의해 무시되는 것을 보여 줍니 다. enter image description here

사람이 어떻게 중첩 ContentPresenters 속성을 설정하거나, 내가 가장 greatful 될 데이터를 표시하는 방법을보다 효율적으로 제어 할 수있는 사용자 정의 GridViewRowPresenter를 설정하는 방법에 저를 교육하는 생각도합니다.

다른 답변이있는 경우 사과 드리지만 google-fu 검색 (및 여기에서 검색)은 유용한 해결책을 밝히지 않았습니다.

업데이트 마지막 목표는 처음 세 열의 텍스트를 ListViewItem의 맨 위에 맞추는 것입니다. enter image description here

+2

간단한 단어 나 이미지로 설명하려고합니다. – AnjumSKhan

+0

GridViewRowPresenter 내에서 ContentPresenters VerticalAlignment를 Stretch로 설정하려고합니다. – 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> 

또 다른 방법은 ContentPresenter.Loaded 이벤트 및이 설정 속성 값을 처리하는 것입니다.

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

처리기 : 너무 Blend Behaviors/Attached Property를 사용하여 수행 할 수 있습니다 Loaded 이벤트 핸들러를 사용 재산의

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

이 변화.

+0

당신은 스타입니다! 고맙습니다. 이것은 매력처럼 작동했습니다. – andidegn

+0

@andidegn 감사합니다. 질문에 관련 문제에 대한 적절한 관련 설명을 게시 해보십시오. 이것은 도움이됩니다. – AnjumSKhan

+0

죄송합니다. 나는 글 쓰는 것으로 생각했다. "ListView 내부의 텍스트를 셀의 위쪽에 맞추려고합니다." 및 "중첩 된 ContentPresenters 속성을 설정하는 방법을 알고있는 사람이 있으면 ..." – andidegn

관련 문제