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