我花了一整天的時間試圖弄清楚如何簡單地將顏色串列(例如:Colors.AliceBlue)作為 GridView 的 ItemsSource,并將這些顏色系結到 DataTemplate 中 Rectangle 的 Fill 屬性。我知道 Fill 屬性必須是畫筆,所以我嘗試使用轉換器將顏色轉換為 SolidColorBrush,但沒有奏效。我也嘗試過不使用轉換器,而是將串列更改為串列,但這也不起作用。無論我做什么,我都會不斷收到系結錯誤,上面寫著:
轉換器無法將“#FFF0F8FF”型別的值轉換為“Brush”型別。系結:路徑=''資料項='#FFF0F8FF'; 目標元素是'Microsoft.UI.Xaml.Shapes.Rectangle'(名稱='null');目標屬性是“填充”(輸入“畫筆”)
我嘗試的一切似乎總是將我的顏色作為 ARGB 回傳,在本例中為“#FFF0F8FF”,這不是該屬性接受的。關于如何將我的顏色串列系結到我的專案/資料模板的任何想法?我絕對想在我的串列中使用顏色名稱,因為以這種方式訪問??顏色比查找它們的 RGB 代碼和諸如此類更容易。
頁面.xaml
<GridView ItemsSource="{x:Bind ColorOptions}" IsItemClickEnabled="True" SelectionMode="Single">
<GridView.ItemTemplate>
<DataTemplate>
<Rectangle Fill="{Binding}" Width="40" Height="40" />
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
頁面.xaml.cs
using System.Windows.Media;
...
public readonly List<Color> ColorOptions = new()
{
Colors.AliceBlue,
Colors.Black,
Colors.DarkBlue,
Colors.Brown,
Colors.DarkGreen,
Colors.Magenta
};
另外,如果您有興趣,這是我創建并嘗試過的轉換器,但也沒有作業。
BrushConverter.cs
using System.Windows.Media;
using Microsoft.UI.Xaml.Data;
namespace App.Helpers;
public class BrushConverter : IValueConverter
{
public object? Convert(object value, Type targetType, object parameter, string language)
{
return new SolidColorBrush((Color)value);
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
return ((SolidColorBrush)value).Color;
}
}
Page.xaml(使用轉換器)
<GridView ItemsSource="{x:Bind ColorOptions}" IsItemClickEnabled="True" SelectionMode="Single">
<GridView.ItemTemplate>
<DataTemplate>
<Rectangle Fill="{Binding Converter={StaticResource BrushConverter}}" Width="40" Height="40" />
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
uj5u.com熱心網友回復:
這樣你就不需要轉換器:
using Microsoft.UI;
using Microsoft.UI.Xaml.Controls;
using Microsoft.UI.Xaml.Media;
using System.Collections.Generic;
using Windows.UI;
namespace GridViews;
public class ColorOption
{
public ColorOption(string name, Color color)
{
Name = name;
Color = new SolidColorBrush(color);
}
public string Name { get; set; }
public Brush Color { get; set; }
}
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}
public List<ColorOption> ColorOptions { get; } = new()
{
new ColorOption("Alice Blue", Colors.AliceBlue),
new ColorOption("Black", Colors.Black),
new ColorOption("Dark Blue", Colors.DarkBlue),
new ColorOption("Brown", Colors.Brown),
new ColorOption("Dark Green", Colors.DarkGreen),
new ColorOption("Magenta", Colors.Magenta),
};
}
<GridView
IsItemClickEnabled="True"
ItemsSource="{x:Bind ColorOptions}"
SelectionMode="Single">
<GridView.ItemTemplate>
<DataTemplate x:DataType="local:ColorOption">
<StackPanel>
<TextBlock Text="{x:Bind Name}" />
<Rectangle
Width="40"
Height="40"
Fill="{x:Bind Color}" />
</StackPanel>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
uj5u.com熱心網友回復:
由于無法使用 System.Windows.Media,因此不得不更改一些內容:
- 在頁面/Window.xaml
<Window
...
xmlns:helpers="using:TestApp.Helpers"
xmlns:vm="using:TestApp.ViewModels"
...>
<Grid>
<Grid.Resources>
<vm:MainViewModel x:Name="ViewModel" />
<helpers:BrushConverter x:Name="BrushConverter" />
</Grid.Resources>
<GridView ItemsSource="{x:Bind ViewModel.ColorOptions, Mode=OneWay}">
<GridView.ItemTemplate>
<DataTemplate>
<Rectangle Width="40" Height="40" Fill="{Binding Converter={StaticResource BrushConverter}}" />
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
</Grid>
</Window>
- 使用 ViewModel(例如 MainViewModel.cs)
using System.Collections.Generic;
using System.Drawing;
namespace TestApp.ViewModels;
public class MainViewModel
{
public List<Color> ColorOptions { get; } = new()
{
Color.Red,
Color.Orange,
Color.Yellow
};
}
- BrushConverter.cs (Drawing.Color to Windows.UI.Color) 為我服務
public object Convert(object value, Type targetType, object parameter, string language)
{
var drawingColor = (System.Drawing.Color)value;
return new SolidColorBrush(Windows.UI.Color.FromArgb(drawingColor.A, drawingColor.R, drawingColor.G, drawingColor.B));
}
輸出

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/533319.html
