在我的应用程序中,我有 ColorToBrushConverter.cs、ColorItem.cs 和一个框页面,当用户单击任何颜色并返回主页时,它包含一些颜色集合,它保存到设置隔离存储然后我可以设置我的堆栈面板任何任何元素背景从该颜色框页面中选择颜色。
但问题是我有一种我想要颜色绑定的样式,所以我们可以从 c# 中做到这一点,或者在下面的类中使用 xaml 中的颜色绑定。
ColorToBrushConverter.cs
namespace CustomColorsPicker.Converters
{
public class ColorToBrushConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value != null)
{
return new SolidColorBrush((Color)(value));
}
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
颜色项.cs
namespace ColorBox
{
public class ColorItem
{
public Color Color { get; set; }
}
}
BoxPage.Xaml
包含颜色列表
xmlns:converters="clr-namespace:CustomColorsPicker.Converters"
<Page.Resources>
<converters:ColorToBrushConverter x:Key="ColorToBrushConverter"/>
</Page.Resources>
//////////
<ListBox Grid.Row="2" Name="listBox" ScrollViewer.VerticalScrollBarVisibility="Disabled" SelectionChanged="lstColor_SelectionChanged" Width="460" Height="770" Margin="0,20,0,0">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel x:Name="item" Orientation="Horizontal" Margin="10,10,0,0">
<Border CornerRadius="5" BorderThickness="2" BorderBrush="{Binding Color, Converter={StaticResource ColorToBrushConverter}}">
<Rectangle Fill="{Binding Color, Converter={StaticResource ColorToBrushConverter}}" Width="50" Height="50" />
</Border>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
BoxPage.xaml.cs
//Constructor. list of colors
static uint[] uintColors =
{
0xFFD9325D,
0xFFFFFF00,0xFFFFE135,0xFFFFFF66,0xFFF8DE7E,0xFF008000,0xFF008A00
};
public BoxPage()
{
InitializeComponent();
this.Loaded += BoxPage_Loaded;
}
private async void BoxPage_Loaded(object sender, RoutedEventArgs e)
{
List<ColorItem> item = new List<ColorItem>();
for (int i = 0; i < 67; i++)
{
item.Add(new ColorItem() { Color = ConvertColor(uintColors[i])});
};
listBox.ItemsSource = item;
}
private void lstColor_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (e.AddedItems.Count > 0)
{
(Application.Current as App).CurrentColorItem = ((ColorItem)e.AddedItems[0]);
}
}
MainPage.xaml.cs
//Constructor
IsolatedStorageSettings ColourSettings = IsolatedStorageSettings.ApplicationSettings;
public MainPage()
{
InitializeComponent();
InitializeSettings();
}
private void InitializeSettings()
{
if (!ColourSettings.Contains("LastColorItem"))
{
ColorItem item = new ColorItem();
item.Color = Colors.Cyan;
ColourSettings.Add("LastColorItem", item);
}
}
protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
base.OnNavigatedFrom(e);
ColourSettings["LastColorItem"] = _colorItem;
}
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
base.OnNavigatedTo(e);
if (ColourSettings.Contains("LastColorItem"))
{
_colorItem = (ColorItem)ColourSettings["LastColorItem"];
}
ColorItem myColorItem = (Application.Current as App).CurrentColorItem;
if (myColorItem != null)
{
_colorItem = (ColorItem)myColorItem;
}
MyFillStackPanel.Background = new SolidColorBrush(_colorItem.Color);
MyCtrlPanelBorder.Background = new SolidColorBrush(_colorItem.Color);
}
主页.xaml
xmlns:converters="clr-namespace:CustomColorsPicker.Converters"
<Page.Resources>
<converters:ColorToBrushConverter x:Key="ColorToBrushConverter"/>
</Page.Resources>
在我的一种风格中,我想将其与上述颜色绑定,因为我无法在 c# 中执行或编辑样式
//SomeStyle
<DiscreteObjectKeyFrame.Value>
<SolidColorBrush Color="{**i want to bind color here**}"/>
</DiscreteObjectKeyFrame.Value>