这是我的XAML makiing Style,其中Button看起来像Ellipse。 我也用钥匙做了颜色,所以我可以改变甚至绑定它(没有运气)。 绑定的问题是我没有要与DataContent绑定的Name。
<Color x:Key="Player1C" >Gray</Color>
<Style x:Key="Player11" x:Name="Pl1style" TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid>
<Ellipse Name="EllipsePl1" Width="30" Height="30" Stroke="#FF000000" StrokeThickness="1">
<Ellipse.Fill>
<SolidColorBrush Color="{StaticResource Player1C}"/>
</Ellipse.Fill>
</Ellipse>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我尝试在C#Player1 = new Style(typeof(Button));
Player1.Setters.Add(new Setter(Ellipse.FillProperty, new SolidColorBrush(GameInstance.Color1)));
但我只是得到一个按钮
然后我创建了一个ControlTemplate,一个网格,一个椭圆并填充了椭圆,以便精确复制XAML
ControlTemplate ct1 = new ControlTemplate(typeof(Button));
Grid agrid = new Grid();
Ellipse el1 = new Ellipse();
el1.Fill = new SolidColorBrush(Colors.Black);
但是当我尝试Player1.Setters.Add(new Setter(ct1 etc etc)
任何帮助都将非常感激,无论是使用XAML绑定还是以c sharp方式执行此操作。 我也试过创建我自己的按钮类但又有问题。
答案 0 :(得分:2)
您可以将椭圆的填充颜色绑定到按钮的背景。所以你只需要改变按钮的背景。
模板:
<Ellipse Fill="{TemplateBinding Background}"/>
答案 1 :(得分:1)
试试这个
<Style x:Key="Player11" x:Name="Pl1style" TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid>
<Ellipse Name="EllipsePl1" Width="30" Height="30" Stroke="#FF000000" StrokeThickness="1">
<Ellipse.Fill>
<SolidColorBrush Color="{DynamicResource Player1C}"/>
</Ellipse.Fill>
</Ellipse>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
public MainWindow()
{
InitializeComponent();
this.Resources.Add("Player1C",Colors.Black);
DataContext = this;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
this.Resources["Player1C"] = Colors.Red;
}
这是你在c#中可以做的很多方法之一。但是你也可以使用Trigger来做。使用绑定您可以这样做。
<SolidColorBrush Color="{Binding Cols, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Window}}}"/>
希望这会有所帮助。