use*_*er1 6 c# xamarin xamarin.forms
我正在构建一个Xamarin Forms应用程序,目前正在草拟我的应用程序Resources,主要是我的颜色。
例如,我有以下内容:
<Color x:Key="Slate">#404040</Color>
<Color x:Key="Blue">#458623</Color>
<Color x:Key="SelectedItemColour">#458623</Color>
Run Code Online (Sandbox Code Playgroud)
如您所见,我SelectedItemColour与相同Blue。
我尝试了以下方法,但是没有用:
<Color x:Key="Slate">#404040</Color>
<Color x:Key="Blue">#458623</Color>
<Color x:Key="SelectedItemColour" Color="{StaticResource Blue}"/>
Run Code Online (Sandbox Code Playgroud)
我知道WPF你能不能按照这里所说的答案
是否可以在Xamarin.Forms中将a Colour Resource指向另一个Colour Resource?
这可能是一个老问题,但我今天正试图为一个项目完成同样的事情,并且想要一个比这里提出的更优雅的解决方案。似乎没有办法纯粹使用 XAML 来完成它,但这是我最终使用的解决方案。
首先,我定义了一个名为的实用程序类ColorReference:
public class ColorReference : INotifyPropertyChanged
{
private Color color = Color.Black;
public Color Color
{
get => this.color;
set
{
this.color = value;
this.OnPropertyChanged();
}
}
#region INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
[ NotifyPropertyChangedInvocator ]
protected virtual void OnPropertyChanged([ CallerMemberName ] string propertyName = null)
{
this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
#endregion
public static implicit operator Color(ColorReference colorReference) => colorReference.Color;
}
Run Code Online (Sandbox Code Playgroud)
我并不是 100% 肯定该INotifyPropertyChanged实现是必要的,但我认为它不会有什么坏处(可能允许在运行时更改颜色;我还没有对此进行测试)。
要使用它,只需将其用作以下资源ResourceDictionary:
<Color x:Key="FirstColor">#51688f</Color>
...
<utility:ColorReference x:Key="SomeOtherColorName" Color="{StaticResource FirstColor}" />
Run Code Online (Sandbox Code Playgroud)
在我的用例中,我使用它来使用主题中定义的颜色来设计 Telerik 控件的样式,这样如果我创建一个新主题,我不需要在各处复制相同的颜色值。明显的缺点是,对于除 之外的任何类型Color,都需要定义一个新类,但我怀疑我需要太多类型来像这样使用别名。希望这可以帮助其他人将来尝试做我正在做的同样的事情。
您可以x:Static与静态类一起使用,以便按名称直接引用这些颜色。这样做的好处是可以将颜色集中到一个类中并最大限度地减少 XAML 的数量。
namespace ResourceColors
{
public static class Colors
{
public static Color Slate = Color.FromHex("#404040");
}
}
Run Code Online (Sandbox Code Playgroud)
<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:ResourceColors;assembly=ResourceColors" x:Class="ResourceColors.PageOne">
<ContentPage.Resources>
<ResourceDictionary>
<Color x:Key="Blue">#458623</Color>
</ResourceDictionary>
</ContentPage.Resources>
<ContentPage.Content>
<StackLayout HorizontalOptions="CenterAndExpand" VerticalOptions="CenterAndExpand">
<Label Text="Test" TextColor="{x:Static local:Colors.Slate}" />
</StackLayout>
</ContentPage.Content>
</ContentPage>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2170 次 |
| 最近记录: |