Сделайте кнопку похожей на эллипс, а затем привяжите ее цвет - PullRequest
0 голосов
/ 28 февраля 2012

Это мой XAML, создающий стиль, в котором кнопка выглядит как эллипс. Я также сделал цвет с ключом, чтобы я мог изменить или даже связать его (не без удачи). Проблема с привязкой заключается в том, что у меня нет имени для привязки к DataContent.

    <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 или способ сделать это до конца. Я также пытался создать свой собственный класс кнопки, но у меня снова были проблемы.

Ответы [ 2 ]

2 голосов
/ 29 февраля 2012

Вы можете привязать цвет заливки эллипса к фону кнопки.Так что вам просто нужно изменить фон кнопки.

Шаблон:

<Ellipse Fill="{TemplateBinding Background}"/>
1 голос
/ 28 февраля 2012

попробуйте это

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

Надеюсь, это поможет.

...