1

式ブレンドを使用してカスタム ボタンを作成し、それを xaml コードに貼り付けました。

<phone:PhoneApplicationPage.Resources>
 <Style x:Key="ButtonStyle1" TargetType="Button">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Button">
                    <Grid>
                        <VisualStateManager.VisualStateGroups>
                            <VisualStateGroup x:Name="CommonStates">
                                <VisualState x:Name="Normal"/>
                                <VisualState x:Name="Disabled"/>
                                <VisualState x:Name="MouseOver"/>
                            </VisualStateGroup>
                            <VisualStateGroup x:Name="FocusStates">
                                <VisualState x:Name="Focused"/>
                            </VisualStateGroup>
                        </VisualStateManager.VisualStateGroups>
                        <Rectangle RadiusY="21" RadiusX="20" Stroke="White"/>
                        <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
 </Style>
</phone:PhoneApplicationPage.Resources>

次に、このリソースを C# コードで使用して、色、フォント サイズ、背景、前景、およびすべてのプロパティを動的に変更しました。

 public partial class MainPage : PhoneApplicationPage
{
    public MainPage()
    {
        InitializeComponent();
        createButton();
    }
    public void createButton()
    {            
        Button buttton = new Button { Height = 100, Background = new SolidColorBrush(Colors.Blue), Width = 300,  Content = " Button", Style = this.Resources["ButtonStyle1"] as Style };                  
        ContentPanel.Children.Add(buttton);

    }

しかし、私はそうすることができず、ボタンに変更が反映されていません。方法はありますか。四角形の色を変更する必要があることを知っています。しかし、それを行う方法がわからない。私はたくさん試しました。ありがとう。

4

1 に答える 1

2

さて、どのプロパティがどのに影響するのでしょうか? ボタンのカスタム コントロール テンプレートを作成しました。これは、ボタンの描画方法を決定することを意味します。テンプレートを見ると、ボタンはGridと の 2 つの子コントロールで構成されRectangleていますContentPresenter

今、あなたが言うとき:

var btn = new Button
{
    Background = new SolidColorBrush(Color.Blue);
};

青になるべきものは何ですか?Grid? _ コントロールRectangleContentPresenter? この質問は原則として答えられないため、ControlTemplate親のプロパティを継承するコントロールを決定する必要があります。

言い換えれば、ButtonのプロパティはControlTemplateviaのコントロールに転送されTemplateBindingます。したがって、 to の意味を移したい場合Button.BackgroundRectangle.Background、テンプレートを次のように変更します。

<Rectangle RadiusY="21" RadiusX="20" Stroke="White"
            Fill="{TemplateBinding Background}"/>

そして今、あなたはあなたが望んでいたかもしれない何かを手に入れます. 設定Button.Backgroundすると、ビジュアル ツリーにないため、ターゲット サブコントロールに転送するだけで、Buttonそのコントロール テンプレートに置き換えられます。

于 2013-09-03T07:07:58.570 に答える