WPF ItemsControl和Togglebuttons奇怪的行为

时间:2015-03-09 13:50:57

标签: c# wpf itemscontrol togglebutton

我一直在研究WPF应用程序,但在使用ItemsControl显示带有绑定的togglebuttons列表时遇到了一些奇怪的行为。它在显示1个元素的集合时工作正常,但是当我有两个元素时,它表现得非常奇怪。如果两个togglebuttons处于相同状态(即切换为开启状态),它将不会立即显示两个togglebuttons的图像。

相关的XAML。我已检查后面的属性是否正确更新,但如果有任何需要的代码,请告诉我。

<ItemsControl x:Name="ServiceItemsControl" Grid.Row="0" ItemsSource="{Binding DraftMessage.Services}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel Orientation="Horizontal"/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <ToggleButton IsChecked="{Binding Path=Selected}">
                <ToggleButton.Style>
                    <Style TargetType="ToggleButton">
                        <Setter Property="Focusable" Value="False"/>
                        <!--Setter Property="BorderThickness" Value="0"/-->
                        <Setter Property="Opacity" Value="1"/>
                        <Setter Property="Content">
                            <Setter.Value>
                                <Image Source="{Binding Path=Service.OtherLogo}" Width="25" Height="25"/>
                            </Setter.Value>
                        </Setter>
                        <Style.Triggers>
                            <Trigger Property="IsChecked" Value="True">
                                <Setter Property="Content">
                                    <Setter.Value>
                                        <Image Source="{Binding Path=Service.Logo}" Width="25" Height="25"/>
                                    </Setter.Value>
                                </Setter>
                            </Trigger>
                        </Style.Triggers>
                    </Style>
                </ToggleButton.Style>
            </ToggleButton>
        </DataTemplate>
    </ItemsControl.ItemTemplate>       
</ItemsControl>

1 个答案:

答案 0 :(得分:1)

当更改DataTrigger值时,您需要使用Image上的Source来更改其ToggleButton.IsChecked属性。试试这个:

<DataTemplate>
    <ToggleButton IsChecked="{Binding Path=IsSelected}">
        <Image Width="25" Height="25">
            <Image.Style>
                <Style TargetType="{x:Type Image}">
                    <Setter Property="Source" Value="{Binding Service.OtherLogo}" />
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding IsChecked, 
                            RelativeSource={RelativeSource AncestorType={x:Type 
                            ToggleButton}}}" Value="True">
                            <Setter Property="Source" Value="{Binding Service.Logo}" />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Image.Style>
        </Image>
        <ToggleButton.Style>
            <Style TargetType="ToggleButton">
                <Setter Property="Focusable" Value="False"/>
                <!--Setter Property="BorderThickness" Value="0"/-->
                <Setter Property="Opacity" Value="1"/>
            </Style>
        </ToggleButton.Style>
    </ToggleButton>
</DataTemplate>