10

画像とテキストブロックをコンテンツとして持つボタンを作成したかったのです。そこで、答えを探して、ユーザーコントロールを作成するように指示する投稿(ボタンの再利用可能なカスタムコンテンツ)を見つけました。

私はこれをしました、そしてそれは素晴らしい働きをします。依存関係のプロパティを使用して、画像のソースとテキストを設定できます。ただし、コントロールのクリックイベントがないため、スタックしています。

もう少し掘り下げて、Buttonから派生したCustomControlがおそらく必要であると結論付けました。これは正しいです?または、クリックイベントをUserControlに接続する方がよいでしょうか。

これが私のUserControlです。

<UserControl x:Class="Client.Usercontrols.MyButton"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" MinHeight="30" MinWidth="40"
    DataContext="{Binding RelativeSource={RelativeSource Self}}">

    <Button Width="Auto" HorizontalAlignment="Center">
        <Border CornerRadius="5" BorderThickness="1" BorderBrush="Transparent" >
            <Grid>
                <Image Name="tehImage" Source="{Binding ImageSource}" />
                <TextBlock Name="tehText" Text="{Binding Text}"
                           Style="{DynamicResource ButtonText}" />
            </Grid>
        </Border>
    </Button>
</UserControl>

実装

<my:MyButton ImageSource="../Images/MainSyncButton.png" ImageWidth="141" Text="Synchronise" Click="btnSynchronise_Click" />
4

2 に答える 2

32

最も簡単なオプションは、UserControlにクリックイベントを公開させ、ボタンのクリックイベントを通過させることです。

MyButtonのxaml:

<Button Width="Auto" HorizontalAlignment="Center" Click="onButtonClick">

MyButtonのコードでは:

public event RoutedEventHandler Click;

void onButtonClick(object sender, RoutedEventArgs e)
{
    if (this.Click != null)
    {
        this.Click(this, e);
    }
}

その後、「実装」コードをそのままにしておくことができます。

于 2009-10-19T17:18:04.483 に答える
3

答えは本当にあなたの目標がコントロールのために何であるかに依存します。バインドしているデータを操作できる場合は、ユーザーまたはカスタムコントロールを作成しないで済む場合があります。動的な画像とテキストを表示するだけの場合は、2つのプロパティを含むImageTextオブジェクトを作成できます。次に、デフォルトのButtonコントロールのContentプロパティをこのオブジェクトにバインドし、DataTemplateを使用してコンテンツのレイアウトを定義できます。

バインドしているデータ型を制御できない場合、またはコントロールを作成することに本当に固執している場合は、カスタムコントロールを作成することをお勧めします。カスタムコントロールを使用すると、標準ボタンの組み込み機能を利用できます。通常、ユーザーコントロールを作成するのは、コントロール内に含まれるビジュアルコントロールのデフォルト機能を非表示またはカプセル化する場合のみです。

幸運を。

于 2009-10-19T17:03:17.513 に答える