2011-01-21 47 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,该树视图使用要突出项目:

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

太棒了。工作得很好......除了一个细节。选定的组具有通常蓝色背景和白色前景。现在背景将保持白色,但文字会变为白色,这意味着文字在选中时会消失。 Lyssna Lösfonetiskt Ordbok - Visa detaljerad ordbokpronomen0.its0.your0.their0.his0.her – magol 2011-01-21 12:51:03

0

树视图项目的分层DataTemplate应该做的伎俩。告诉我们你的尝试。

+0

我知道这个数据模板,但不知道我会怎么做到的。我已经添加了我到目前为止的代码 – magol 2011-01-21 09:22:50