2011-01-21 5 views
0

각 노드에는 아이콘과 설명 텍스트가있는 TreeView가 있습니다. 하지만 어떤 노드도 선택할 수 없길 원합니다. 대신 각 노드가 버튼으로 작동하기를 원합니다. 그것은 사용자가 그것을 누를 때 명령을 실행합니다. 버튼이나 하이퍼 링크처럼 보이지 않을 수도 있습니다.버튼이있는 TreeView

이것은 지금까지 시도한 것입니다. 문제는 텍스트가 파란색이고 텍스트에 밑줄이 그어져 있다는 것입니다. 또한 때때로 노드가 선택되어 파란색으로 표시됩니다.

<TreeView.Resources> 
    <HierarchicalDataTemplate DataType="{x:Type vm:ListGroupViewModel}" ItemsSource="{Binding Children}"> 
     <StackPanel Orientation="Horizontal"> 
      <TextBlock Text="{Binding Text}" FontWeight="Bold" ></TextBlock> 
     </StackPanel> 
    </HierarchicalDataTemplate> 

    <DataTemplate DataType="{x:Type vm:ListNodeViewModel}"> 
     <TextBlock> 
      <Hyperlink TextDecorations="{x:Null}" Command="{Binding ClickCommand, Mode=OneTime}"> 
       <StackPanel Orientation="Horizontal"> 
        <Image Margin="0,2,2,0" Source="{Binding Icon}" /> 
        <TextBlock Text="{Binding Text}" /> 
       </StackPanel> 
      </Hyperlink> 
     </TextBlock> 
    </DataTemplate> 
</TreeView.Resources> 

답변

3

:

 <Style x:Key="HyperlinkStyle" TargetType="Hyperlink"> 
      <Setter Property="Foreground" 
        Value="Black"/> 
      <Setter Property="TextDecorations" 
        Value="{x:Null}"/> 
     </Style> 

     <DataTemplate DataType="{x:Type vm:ListNodeViewModel}"> 
      <TextBlock> 
       <Hyperlink Command="{Binding ClickCommand, Mode=OneTime}" 
          Style="{StaticResource HyperlinkStyle}"> 
        <StackPanel Orientation="Horizontal"> 
         <Image Margin="0,2,2,0" Source="{Binding Icon}" /> 
         <TextBlock Text="{Binding Name}" /> 
        </StackPanel> 
       </Hyperlink> 
      </TextBlock> 
     </DataTemplate> 

당신은 트리보기 항목을 강조하기 위해 사용하는 SystemColors.HighlightBrushKey, 오버라이드 (override) 할 수 트리 항목 선택을 숨기려면 :

<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent"/> 
+0

좋아요. 하나의 세부 사항을 제외하고는 잘 작동합니다. 선택한 그룹은 일반적으로 파란색 배경과 흰색 전경색을가집니다. 이제 배경은 흰색으로 유지되지만 텍스트가 흰색으로 변경됩니다. 즉, 텍스트를 선택하면 사라집니다. Lyssna 방수입 내역 Ordbok - 비공개 개 방형도 0.its0.your0.their0.his0.her – magol

+0

죄송합니다. \t 정보가 부족하여 문제를 이해할 수 없습니다. 예를 들어 전경/배경을 설정하고 선택시 트리 항목을 사용하여 조작하는 두 가지 데이터 템플릿을 만들어야하는 이유를 이해할 수 없습니다. 자세한 내용, 코드, 이미지, 설명이 도움이 될 것입니다. –

+0

다른 노드를 포함하는 노드에는 아이콘이없고 리프 노드와 다른 형식이 있습니다. 그래서 HierarchicalDataTemplate을 사용하여 형식을 지정합니다. 그러나 다른 노드가 포함 된 노드를 선택하면 텍스트 색상이 자동으로 흰색으로 변경됩니다. 그러나 나는 그것을 사용하여 해결할 수있었습니다 : 질문이 하나 있습니다. 하드 코딩 "블랙"을 피하려면 어떻게해야합니까? "{x : Static SystemColors"를 사용할 수 있습니까? – magol

0

TreeView 항목에 대한 계층 적 DataTemplate이 트릭을 수행해야합니다. 우리가 한 일을 보여줘. 당신은 하이퍼 링크 스타일을 오버라이드 (override) 할 필요가

+0

내가 데이터 템플릿을 알고,하지만 어떻게 해야할지 모르겠다. 지금까지 해왔 던 코드를 추가했습니다. – magol