Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.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# 椭圆作为单选按钮_C#_Wpf_Triggers_Itemscontrol_Ellipse - Fatal编程技术网

C# 椭圆作为单选按钮

C# 椭圆作为单选按钮,c#,wpf,triggers,itemscontrol,ellipse,C#,Wpf,Triggers,Itemscontrol,Ellipse,在我的项目中,我有一个小的颜色选择器,它实际上是一个ItemsControl,其中SolidColorBrush作为项目,椭圆作为项目模板 我希望用户选择一种颜色,当他单击椭圆时,我希望边界厚度从0变为2,以便高亮显示选定的椭圆 我已经设法在用户悬停项目时使用触发器更改了边框厚度。但是,我将在哪里保存有关所选颜色的信息?我实在想不出有什么办法。我如何管理悬停时的触发器即使在选定的触发器已激活时仍会触发 谢谢。 这里有一些标记和代码要考虑。 列表框的选定项也将成为collectionview的当前

在我的项目中,我有一个小的颜色选择器,它实际上是一个ItemsControl,其中SolidColorBrush作为项目,椭圆作为项目模板

我希望用户选择一种颜色,当他单击椭圆时,我希望边界厚度从0变为2,以便高亮显示选定的椭圆

我已经设法在用户悬停项目时使用触发器更改了边框厚度。但是,我将在哪里保存有关所选颜色的信息?我实在想不出有什么办法。我如何管理悬停时的触发器即使在选定的触发器已激活时仍会触发


谢谢。

这里有一些标记和代码要考虑。 列表框的选定项也将成为collectionview的当前项。您可以绑定它,在viewmodel的代码中获取它,还可以导航到下一个和上一个。

我将矩形绑定到当前画笔,以便在选择不同的条目时更改。当您将鼠标移到某个项目上时,列表框已显示浅蓝色背景,该项目会稍微高亮显示。我的触发器也会稍微增大椭圆的大小

<Window.DataContext>
    <local:MainWIndowViewModel/>
</Window.DataContext>
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="100"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <ListBox ItemsSource="{Binding BrushesView}"
             IsSynchronizedWithCurrentItem="True"
             > 
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Ellipse Fill="{Binding}" Height="20" Width="20">
                    <Ellipse.Style>
                        <Style TargetType="Ellipse">
                            <Setter Property="Stroke"          Value="Gray"/>
                            <Setter Property="StrokeThickness" Value="1"/>
                            <Style.Triggers>
                                <DataTrigger Binding="{Binding Path=IsSelected, RelativeSource={
                                       RelativeSource Mode=FindAncestor, AncestorType=ListBoxItem}}"
                                       Value="True">
                                    <Setter Property="Ellipse.Stroke" Value="Black"/>
                                    <Setter Property="Ellipse.StrokeThickness" Value="2"/>
                                </DataTrigger>
                                <Trigger Property="IsMouseOver" Value="True">
                                    <Setter Property="RenderTransform">
                                        <Setter.Value>
                                            <ScaleTransform ScaleX="1.2" ScaleY="1.2" />
                                        </Setter.Value>
                                    </Setter>
                                </Trigger>
                            </Style.Triggers>
                        </Style>
                    </Ellipse.Style>
                </Ellipse>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
    <Rectangle           
               Grid.Column="1"
               Width="40"
               Height="40"
               Fill="{Binding BrushesView/}"/>
</Grid>

viewmodel:

public class MainWIndowViewModel
{
    public CollectionView BrushesView { get; set; }
    private ObservableCollection<SolidColorBrush> BrushesList { get; set; } =
        new ObservableCollection<SolidColorBrush>
        {
            Brushes.Yellow, Brushes.Pink, Brushes.Blue, Brushes.Green, Brushes.Red, Brushes.Purple
        };
    public MainWIndowViewModel()
    {
        BrushesView = (CollectionView)new CollectionViewSource { Source = BrushesList }.View;
    }
}
公共类MainWIndowViewModel
{
公共集合视图笔刷视图{get;set;}
私有ObservableCollection笔刷列表{get;set;}=
新可观测集合
{
画笔。黄色,画笔。粉色,画笔。蓝色,画笔。绿色,画笔。红色,画笔。紫色
};
公共主窗口视图模型()
{
BrushesView=(CollectionView)新的CollectionViewSource{Source=BrushesList}.View;
}
}

到目前为止,您是否可以粘贴代码?为什么不使用字符串变量并将颜色值传递给它?如果需要选择功能,请使用列表框而不是ItemsControl。不需要重新设计WPF提供的现有选择逻辑。ListBox源于ItemsControl,因此所需的大多数更改只是将ItemsControl替换为ListBox,并更改ItemsTemplate(可能引入ItemContainerStyle),以便它反映项目的选定状态(请参见此处:)