Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在WPF中选择时更改列表框项目样式_C#_Wpf - Fatal编程技术网

C# 在WPF中选择时更改列表框项目样式

C# 在WPF中选择时更改列表框项目样式,c#,wpf,C#,Wpf,我不完全确定我做的不对,但我的风格触发器似乎没有被识别。我想在选择列表框项目时更改笔划的颜色 <ListBox ItemsSource="{Binding CityList}" DisplayMemberPath="Name" SelectionMode="Extended" VirtualizingPanel.IsVirtualizing="true" VirtualizingPanel.VirtualizationMo

我不完全确定我做的不对,但我的风格触发器似乎没有被识别。我想在选择列表框项目时更改笔划的颜色

<ListBox ItemsSource="{Binding CityList}" DisplayMemberPath="Name" SelectionMode="Extended"
                 VirtualizingPanel.IsVirtualizing="true"
                 VirtualizingPanel.VirtualizationMode="Recycling"
                 Background="Brown">

            <ListBox.ItemContainerStyle>
                <Style TargetType="{x:Type ListBoxItem}">
                    <Setter Property="Canvas.Left" Value="{Binding Longitude, Converter={StaticResource longValueConverter}, ConverterParameter={StaticResource mapWidth}}"/>
                    <Setter Property="Canvas.Top" Value="{Binding Latitude, Converter={StaticResource latValueConverter}, ConverterParameter={StaticResource mapHeight}}"/>
                    <Setter Property="BorderThickness" Value="3" />

                    <Setter Property="ContentTemplate">
                        <Setter.Value>
                            <DataTemplate>
                                <Grid>
                                    <Ellipse x:Name="indicator" 
                                             Fill="#FF000000" 
                                             Height="10" 
                                             Width="10" 
                                             Stroke="Transparent"
                                             StrokeThickness="2"/>
                                </Grid>
                            </DataTemplate>
                        </Setter.Value>
                    </Setter>
                    <Style.Triggers>
                        <Trigger Property="IsSelected" Value="True">
                            <Setter TargetName="indicator" Property="Stroke" Value="Red"/>
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </ListBox.ItemContainerStyle>

            <ListBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <Canvas IsItemsHost="True"
                            Width="{StaticResource mapWidth}"
                            Height="{StaticResource mapHeight}"/>
                </ItemsPanelTemplate>
            </ListBox.ItemsPanel>

        </ListBox>

您不能在样式设置器中使用
TargetName

不必设置ContentTemplate属性,您可以设置Template属性并将触发器添加到
ControlTemplate.Triggers
集合:

<Setter Property="Template">
    <Setter.Value>
        <ControlTemplate TargetType="ListBoxItem">
            <Grid>
                <Ellipse x:Name="indicator" 
                         Fill="#FF000000" 
                         Height="10" 
                         Width="10" 
                         Stroke="Transparent"
                         StrokeThickness="2"/>
            </Grid>
            <ControlTemplate.Triggers>
                <Trigger Property="IsSelected" Value="True">
                    <Setter TargetName="indicator" Property="Stroke" Value="Red"/>
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>
    </Setter.Value>
</Setter>


您还可以将ContentPresenter添加到ControlTemplate的网格中,该网格将显示ItemTemplate的元素(如果您以后决定声明一个元素)。

您不能在样式设置器中使用
TargetName

不必设置ContentTemplate属性,您可以设置Template属性并将触发器添加到
ControlTemplate.Triggers
集合:

<Setter Property="Template">
    <Setter.Value>
        <ControlTemplate TargetType="ListBoxItem">
            <Grid>
                <Ellipse x:Name="indicator" 
                         Fill="#FF000000" 
                         Height="10" 
                         Width="10" 
                         Stroke="Transparent"
                         StrokeThickness="2"/>
            </Grid>
            <ControlTemplate.Triggers>
                <Trigger Property="IsSelected" Value="True">
                    <Setter TargetName="indicator" Property="Stroke" Value="Red"/>
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>
    </Setter.Value>
</Setter>


您还可以将ContentPresenter添加到ControlTemplate中的网格中,该网格将显示ItemTemplate的元素(如果您以后决定声明一个元素)。

根据文档中此页面的示例,您可以命名
笔划本身,并使用setter将其作为目标@Tim您不能在样式设置器中使用TargetName。@克莱门斯,那么这就是问题的答案,因为他肯定已经在使用了。@问题中的Tim XAML不会编译……请注意,VirtualzingPanel属性没有任何效果,因为您将画布用作ItemsPanel。此外,DisplayMemberPath将不起作用。根据文档中此页面的示例,看起来您可以命名
笔划
本身,并使用setter将其作为目标@Tim您不能在样式设置器中使用TargetName。@克莱门斯,那么这就是问题的答案,因为他肯定已经在使用了。@问题中的Tim XAML不会编译……请注意,VirtualzingPanel属性没有任何效果,因为您将画布用作ItemsPanel。此外,DisplayMemberPath将不起作用。