2010-10-28 63 views
0

好日子,樹型視圖按鈕命令在這裏結合

第一個問題,只是學習WPF,所以請溫柔...

我試圖建立一個TreeView其項目火命令。我確信有很多方法可以實現這一點,但我的方法是使用一個ControlTemplate爲TreeViewItem創建一個Style,其中包含一個RadioButton作爲它的命令功能。

. . . 
<ToggleButton x:Name="Expander" 
    Style="{StaticResource ExpandCollapseToggleStyle}" Grid.Column="0" Grid.Row="0" 
    IsChecked="{Binding Path=IsExpanded, RelativeSource={RelativeSource TemplatedParent}}" 
    ClickMode="Press"/> 
    <RadioButton Style="{StaticResource TreeElementStyle}" 
    Grid.Row="0" Grid.Column="1" Command="{TemplateBinding ???}"> 
    <ContentPresenter x:Name="PART_Header" ContentSource="Header"/> 
    </RadioButton> 
    <ItemsPresenter x:Name="ItemsHost" Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="2"/> 
</Grid> 
. . . 

無論如何,我有樹在視覺上看起來很好,但無法捉摸怎麼我的命令綁定到納入單選按鈕,並在模板混亂的泥潭很失落。

. . . 
<TreeView> 
    <TreeViewItem Header="Enterprise"> 
    <TreeViewItem Header="General Settings" 
     Command="{Binding Path=GeneralSettingsCommand}"/> 
. . . 

我會提供更多的代碼,但我認爲在這一點上,答案會更沿,行「哥們,你的方式偏離了軌道。閱讀嗒嗒第一」,或「按鈕完全不必要的「或者‘你應該用一個ItemTemplate而不是’或...」或‘乾脆放棄已經’)

+0

不'{TemplateBinding TreeViewItem.Command}'工作? – decyclone 2010-12-17 07:51:38

回答

0

謝謝Meleak;良好的信息

但是,我發現了一個很簡單的解決方案 - 無論如何我的目的

整個技巧是提供按鈕爲t他TreeViewItem.Header而不是將其合併到TreeViewItem的ControlTemplate中。

如果我將Button作爲TreeViewItem.Header提供,我可以很容易地在其上設置Command並適當地設置它。

這裏是例子:

<Page 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Page.Resources> 
    <Style TargetType="{x:Type RadioButton}"> 
     <Setter Property="GroupName" Value="TreeGroup"/> 
     <Setter Property="Focusable" Value="False"/> 
     <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type RadioButton}"> 
      <Grid > 
       <Grid.ColumnDefinitions> 
       <ColumnDefinition/> 
       <ColumnDefinition/> 
       </Grid.ColumnDefinitions> 
       <!-- beginnings of a folder icon --> 
       <Border Background="Black" VerticalAlignment="Center" Width="12" Height="10" CornerRadius="2"> 
       <Border Background="DarkGoldenrod" Margin="1"/> 
       </Border> 
       <Border Grid.Column="1" Margin="4,0,0,0" Padding="1,2,4,2" Name="Selection" Background="Transparent"> 
       <ContentPresenter /> 
       </Border> 
      </Grid> 
      <ControlTemplate.Triggers> 
       <Trigger Property="IsChecked" Value="True"> 
       <Setter TargetName="Selection" Property="Background" Value="DarkBlue"/> 
       <Setter Property="Foreground" Value="White"/> 
       </Trigger> 
      </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
     </Setter> 
    </Style> 
    </Page.Resources> 
    <Grid> 
    <TreeView Width="220" Focusable="False"> 
     <TreeViewItem IsExpanded="True"> 
     <TreeViewItem.Header> 
      <RadioButton Content="Enterprise"/> 
     </TreeViewItem.Header> 
     <TreeViewItem> 
      <TreeViewItem.Header> 
      <RadioButton Content="Settings" Command="{Binding SettingsCommand}"/> 
      </TreeViewItem.Header> 
     </TreeViewItem> 
     <TreeViewItem> 
      <TreeViewItem.Header> 
      <RadioButton Content="Statistics" Command="{Binding StatisticsCommand}"/> 
      </TreeViewItem.Header> 
     </TreeViewItem> 
     </TreeViewItem> 
    </TreeView> 
    </Grid> 
</Page>