使按钮看起来像椭圆,然后绑定它的颜色

时间:2012-02-28 17:51:26

标签: wpf xaml button bind ellipse

这是我的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方式执行此操作。 我也试过创建我自己的按钮类但又有问题。

2 个答案:

答案 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}}}"/>

希望这会有所帮助。