2011-01-21 15 views
0

私は、各ノードにアイコンと説明文がある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、オーバーライドすることができます:

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

素晴らしいです。 1つの詳細を除いて、うまく動作します。選択されたグループは、通常、青色の背景と白い前景を持つ。これで、背景は白のままですが、テキストは白に変わります。つまり、選択するとテキストが消えます。 Lyssna 電話番号 Ordbok - Visaサービスをご利用いただけません.06 .its0.your0.their0.his0.her – magol

+0

申し訳ありませんが、\t情報が不十分なため、あなたの問題を理解できません。たとえば、フォアグラウンド/バックグラウンドを設定する2つのデータテンプレートを作成する必要がある理由と、選択時にツリー項目を操作する方法を理解できません。詳細、コード、イメージ、説明が役立ちます。 –

+0

他のノードを含むノードにはアイコンがなく、リーフノードとは異なる書式を持ちます。だから私はそれらをフォーマットするためにHierarchicalDataTemplateを使用します。しかし、他のノードを含むノードを選択すると、テキストの色は自動的に白に変更されます。 しかし、私はそれを解決することができました: 私には1つの質問があります。ハードコーディング「ブラック」を避けるためにはどうすればよいですか。 「{x:Static SystemColors」を使用することはできますか? – magol

0

TreeViewアイテム用の階層型のDataTemplateがこのトリックを行う必要があります。あなたが試したことを教えてください。

+0

を私はデータテンプレートを知っていたが、どのように私はそれに着くかわからない。私は今までに行ったコードを追加しました – magol

関連する問題