ListBox所选项目更改时的触发器命令

时间:2017-07-11 07:28:42

标签: wpf xaml listbox

我正在尝试使用ListBox和按钮作为ListBoxItems设置一种菜单,以便在选择更改时触发命令,但结果是某些时候所选的ListBoxItem被更改但命令未被触发,其他时候相反。 XAML如下:

<Window.Resources>
    <DataTemplate DataType="{x:Type viewModels:TripViewModel}">
        <views:TripView />
    </DataTemplate>
    <DataTemplate DataType="{x:Type viewModels:AddTripViewModel}">
        <views:AddTripView />
    </DataTemplate>

    <Style TargetType="{x:Type Button}">
        <Setter Property="Height"
                Value="50" />
        <Setter Property="Background"
                Value="Transparent" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Button">
                    <Border>
                        <Grid Background="Transparent">
                            <ContentPresenter HorizontalAlignment="Center"
                                              VerticalAlignment="Center" />
                        </Grid>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <Style TargetType="{x:Type ListBoxItem}">
        <Setter Property="Padding"
                Value="3" />
        <Setter Property="Background"
                Value="Transparent" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ListBoxItem}">
                    <Border BorderBrush="Transparent"
                            BorderThickness="0"
                            Background="{TemplateBinding Background}">
                        <ContentPresenter HorizontalAlignment="Center"
                                          VerticalAlignment="Center" />
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsMouseOver"
                                 Value="True">
                            <Setter Property="Background"
                                    Value="DarkCyan" />
                        </Trigger>
                        <Trigger Property="IsSelected"
                                 Value="True">
                            <Setter Property="Background"
                                    Value="DarkCyan" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>

<Window.Content>
    <DockPanel Margin="0"
               HorizontalAlignment="Stretch"
               VerticalAlignment="Stretch"
               Height="Auto"
               Width="Auto"
               LastChildFill="True">

        <!-- Left Panel -->
        <Border BorderBrush="Black"
                BorderThickness="0,0,1,0">
            <StackPanel DockPanel.Dock="Left"
                        Margin="0"
                        Background="#555D6F">

                <!-- First Row: Stacco Image -->
                <Image Height="183"
                       Width="275"
                       Margin="3"
                       Source="/Media/stacco.png" />

                <!-- Second Row: Buttons -->
                <ScrollViewer CanContentScroll="True"
                              VerticalAlignment="Stretch"
                              VerticalScrollBarVisibility="Auto"
                              Margin="0,10,0,0">
                    <ListBox Name="MenuButtons"
                             ItemsSource="{Binding PageViewModels}"
                             Background="#555D6F"
                             IsSynchronizedWithCurrentItem="True">
                        <ListBox.ItemTemplate>
                            <ItemContainerTemplate>
                                <Button Content="{Binding Name}"
                                        Command="{Binding DataContext.ChangePageCommand, RelativeSource={RelativeSource AncestorType={x:Type Window}}}"
                                        Margin="0" />
                            </ItemContainerTemplate>
                        </ListBox.ItemTemplate>
                    </ListBox>
                </ScrollViewer>
            </StackPanel>
        </Border>

        <!-- Control Area: Different View made by controls -->
        <ContentControl DockPanel.Dock="Right"
                        Content="{Binding CurrentPageViewModel}" />
    </DockPanel>
</Window.Content>

我是否正确尝试在ItemContainerTemplate中插入按钮?使用后面的代码触发选择更改会更好吗?

0 个答案:

没有答案