C# 具有模板命令绑定的自定义ListboxItem
我试图构建一个自定义ListboxItem,但我很难将命令绑定到TemplateControlC# 具有模板命令绑定的自定义ListboxItem,c#,wpf,xaml,custom-controls,controltemplate,C#,Wpf,Xaml,Custom Controls,Controltemplate,我试图构建一个自定义ListboxItem,但我很难将命令绑定到TemplateControl <Style x:Key="{x:Type controls:NavigationRailItem}" TargetType="{x:Type controls:NavigationRailItem}"> <Setter Property="Background" Value="Transparent&qu
<Style x:Key="{x:Type controls:NavigationRailItem}" TargetType="{x:Type controls:NavigationRailItem}">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type controls:NavigationRailItem}" >
<StackPanel Orientation="Vertical" >
<StackPanel.InputBindings>
<MouseBinding Gesture="LeftClick" Command="{TemplateBinding Command}"/>
</StackPanel.InputBindings>
<materialDesign:PackIcon Kind="{TemplateBinding IconKind}" HorizontalAlignment="Stretch" Width="25" Height="25" VerticalAlignment="Stretch"/>
<TextBlock Text="{TemplateBinding Text}" FontSize="11" HorizontalAlignment="Center"/>
<ContentPresenter/>
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
在我的主窗口中,我尝试将命令绑定到我的ViewModel。如果我试图直接绑定DependencyProperty,我不会得到Click事件。
如果我在主窗口中再次使用InputBinding绑定它,我就会得到它。最后一个测试是直接使用ListboxItem的本机实现
<ListBox Grid.Column="1" HorizontalAlignment="Center">
<Controls1:NavigationRailItem IconKind="Car" Text="Test1" Command="{Binding TestCommand}"/>
<Separator Height="10"/>
<Controls1:NavigationRailItem IconKind="XboxLive" Text="Test2" >
<Controls1:NavigationRailItem.InputBindings>
<MouseBinding Gesture="LeftClick" Command="{Binding TestCommand}"/>
</Controls1:NavigationRailItem.InputBindings>
</Controls1:NavigationRailItem>
<ListBoxItem >
<StackPanel Orientation="Vertical" >
<StackPanel.InputBindings>
<MouseBinding Gesture="LeftClick" Command="{Binding TestCommand}"/>
</StackPanel.InputBindings>
<materialDesign:PackIcon Kind="Apple" HorizontalAlignment="Stretch" Width="25" Height="25" VerticalAlignment="Stretch"/>
<TextBlock Text="Test3" FontSize="11" HorizontalAlignment="Center"/>
</StackPanel>
</ListBoxItem>
</ListBox>
谁能告诉我我做错了什么?我想了解如何构建自己的控件。
TemplateBinding
只能在控件模板中使用。因此,要解决此问题,请在控件模板中更改以下行:
为此:
<ListBox Grid.Column="1" HorizontalAlignment="Center">
<Controls1:NavigationRailItem IconKind="Car" Text="Test1" Command="{Binding TestCommand}"/>
<Separator Height="10"/>
<Controls1:NavigationRailItem IconKind="XboxLive" Text="Test2" >
<Controls1:NavigationRailItem.InputBindings>
<MouseBinding Gesture="LeftClick" Command="{Binding TestCommand}"/>
</Controls1:NavigationRailItem.InputBindings>
</Controls1:NavigationRailItem>
<ListBoxItem >
<StackPanel Orientation="Vertical" >
<StackPanel.InputBindings>
<MouseBinding Gesture="LeftClick" Command="{Binding TestCommand}"/>
</StackPanel.InputBindings>
<materialDesign:PackIcon Kind="Apple" HorizontalAlignment="Stretch" Width="25" Height="25" VerticalAlignment="Stretch"/>
<TextBlock Text="Test3" FontSize="11" HorizontalAlignment="Center"/>
</StackPanel>
</ListBoxItem>
</ListBox>