【问题标题】:Changing ellipse fill color inside a button更改按钮内的椭圆填充颜色
【发布时间】:2015-12-17 15:14:24
【问题描述】:

我想在启用按钮时将椭圆填充颜色更改为绿色。

   <Button x:Name="btn_Kaart2" Grid.Column="1" Grid.Row="2" IsEnabled="False">
        <Button.Template>
            <ControlTemplate>
                <Ellipse x:Name="ellipse_2" 
                         Height="35"
                         Stroke="Black"
                         Fill="Red"
                         Margin="-300,440,0,0"/>
            </ControlTemplate>
        </Button.Template>
    </Button>

通常我会使用ellipse_2.Fill = "Color",但这不起作用,程序找不到ellipse_2

【问题讨论】:

  • 能否提供您尝试更改颜色的代码?
  • ellipse_2 != elliplse_2
  • @blas3nik 目前我只有一个带有 if 子句的方法,用于检查按钮是否启用,并且在加载 UserControl 时调用该方法。
  • @Albireo 抱歉,这只是一个错字。

标签: c# wpf


【解决方案1】:

您可以使用带有RelativeSource 的数据绑定来获得此信息,而无需任何额外代码

<Button x:Name="btn_Kaart2" Grid.Column="1" Grid.Row="2" IsEnabled="False">
    <Button.Template>
        <ControlTemplate>
            <Ellipse x:Name="ellipse_2" 
                Height="35"
                Margin="-300,440,0,0"
                Stroke="Black">
            <Ellipse.Style>
                <Style TargetType="Ellipse">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding IsEnabled, RelativeSource={RelativeSource AncestorType=Button}}" Value="false">
                            <Setter Property="Fill" Value="red"></Setter>
                        </DataTrigger>
                        <DataTrigger Binding="{Binding IsEnabled, RelativeSource={RelativeSource AncestorType=Button}}" Value="true">
                            <Setter Property="Fill" Value="green"></Setter>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Ellipse.Style>
            </Ellipse>
        </ControlTemplate>
    </Button.Template>
</Button>

Ellipse 本身没有 Fill 属性很重要
您可以通过更改 *.xaml 中的 IsEnabled 值来尝试此操作,并且颜色应立即在设计器中更改。

【讨论】:

  • 嗯,这应该可以,但由于某种原因它不会。我会将其标记为已回答并尝试以其他方式实现该按钮。
  • 又是我的错,忘记删除 Fill 属性。谢谢!