2

私はWPFを学び始めたばかりです。

画像付きのボタンがあります。お気に入りImage+Text

    <Button Height="67" Name="Button1" Width="228" HorizontalContentAlignment="Left">
        <StackPanel Orientation="Horizontal" >
            <Image Source="Images/add.png" Stretch="Uniform"></Image>
            <TextBlock Text="  Create Company" VerticalAlignment="Center" FontSize="20"></TextBlock>
        </StackPanel>
    </Button>

ここで、上記の形式でさらに多くのボタンを追加したいと思います。そのため、同じコードを何度も書かなければなりません。

そこで、自分の仕事を簡単に行うために customButton を用意することにしました。カスタム コントロールを作成しようとしました。

そこに Image という名前のプロパティを追加しました。では、その資産にどのように価値を与えるべきでしょうか?

私は間違った道を進んでいますか?

4

1 に答える 1

5

ここでは、カスタム コントロールを作成する方法について説明します

[1.] 「ButtonImg」という名前の新しい項目「Custom Control (WPF)」を追加します。

このステップの後、VS は "ButtonImg.cs" と "/Themes/Generic.xaml" の 2 つのファイルを作成します。

[2.] "ButtonImg.cs" ファイルにいくつかの依存関係プロパティを追加します。

画像ソース、テキスト、画像の幅と高さのプロパティを作成しました。

public class ButtonImg : Control
{
    static ButtonImg()
    {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(ButtonImg), new FrameworkPropertyMetadata(typeof(ButtonImg)));
    }

    public ImageSource ImageSource
    {
        get { return (ImageSource)GetValue(ImageSourceProperty); }
        set { SetValue(ImageSourceProperty, value); }
    }        
    public static readonly DependencyProperty ImageSourceProperty =
        DependencyProperty.Register("ImageSource", typeof(ImageSource), typeof(ButtonImg), new PropertyMetadata(null));

    public string Text
    {
        get { return (string)GetValue(TextProperty); }
        set { SetValue(TextProperty, value); }
    }
    public static readonly DependencyProperty TextProperty =
        DependencyProperty.Register("Text", typeof(string), typeof(ButtonImg), new PropertyMetadata(string.Empty));

    public double ImageWidth
    {
        get { return (double)GetValue(ImageWidthProperty); }
        set { SetValue(ImageWidthProperty, value); }
    }
    public static readonly DependencyProperty ImageWidthProperty =
        DependencyProperty.Register("ImageWidth", typeof(double), typeof(ButtonImg), new PropertyMetadata((double)30));

    public double ImageHeight
    {
        get { return (double)GetValue(ImageHeightProperty); }
        set { SetValue(ImageHeightProperty, value); }
    }
    public static readonly DependencyProperty ImageHeightProperty =
        DependencyProperty.Register("ImageHeight", typeof(double), typeof(ButtonImg), new PropertyMetadata((double)30));
}

[3.] このステップでは、新しいカスタム コントロールのテンプレートを作成する必要があります。したがって、次のファイル「/Themes/Generic.xaml」を編集する必要があります。

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:WpfButtonImg">

    <Style TargetType="{x:Type local:ButtonImg}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type local:ButtonImg}">                  
                    <Button>
                        <Button.Content>
                            <StackPanel Orientation="Horizontal">
                                <Image Source="{TemplateBinding ImageSource}" 
                                       Height="{TemplateBinding ImageHeight}" Width="{TemplateBinding ImageWidth}" 
                                       Stretch="Uniform" />
                                <TextBlock Text="{TemplateBinding Text}" Margin="10,0,0,0" VerticalAlignment="Center" FontSize="20" />
                            </StackPanel>
                        </Button.Content>
                    </Button>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>

[4.] この新しいカスタム コントロールの使用例は次のとおりです。

まず、適切な名前空間を追加する必要があります:

xmlns:MyNamespace="clr-namespace:WpfButtonImg"

これで、次のように使用できます。

<MyNamespace:ButtonImg ImageSource="/Images/plug.png" Text="Click me!" />
于 2013-05-26T19:14:07.450 に答える