1

私は自分の WPF アプリケーションに Caliburn Micro を使用しています。少し UserControl を実装しました。

<UserControl Name="ImageButtonUserControl"
             x:Class="SportyMate.Utility.Controls.ImageButton"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006">
    <Grid>
        <Button>
            <StackPanel Orientation="Horizontal">
                <Image Source="{Binding ElementName=ImageButtonUserControl, Path=Image}" />
                <TextBlock Text="{Binding ElementName=ImageButtonUserControl, Path=Text}" />
            </StackPanel>
        </Button>
    </Grid>
</UserControl>

今、私は自分のビューでこれらのコントロールを使用したいと考えています:

<uc:ImageButton Name="Cancel" Image="/Images/Icons/cancel_16x16.png" Text="Abbrechen" Margin="3" />

ビューを開こうとすると (私の場合はダイアログとして開かれます)、機能しません。ビューは開きません。Name-Attribute を削除すると問題はありませんが、ボタンにはアクションへのバインドがありません。正しいバインディングのために私がしなければならないことを誰か教えてもらえますか? 通常のボタンが機能しました。

4

1 に答える 1

2

あなたは完全に間違った道を進んでいます。このような単純な変更のためのユーザー コントロールを作成しないでください。DataTemplate を作成し、それを Button.ContentTemplate に使用する必要があります。まず、ボタン コンテンツのヘルパー タイプを定義する必要があります。

public class ImageButtonContent
{
    public BitmapImage Image { get; set; }
    public string Label { get; set; }
}

その後、DataTemplate に使用できます。

<Window x:Class="Trys.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:Trys="clr-namespace:Trys"
            Title="MainWindow"
            Height="350"
            Width="525">
      <Window.Resources>
        <Trys:ImageButtonContent x:Key="YourImageButtonHere"
                                 Label="Your ImageButtonHere">
          <Trys:ImageButtonContent.Image>
            <BitmapImage UriSource="your-icon.png" />
          </Trys:ImageButtonContent.Image>
        </Trys:ImageButtonContent>
        <DataTemplate x:Key="ImageButton"
                      DataType="{x:Type Trys:ImageButtonContent}">
          <StackPanel Orientation="Horizontal">
            <Image Source="{Binding Image}"
                   Margin="5" />
            <TextBlock Text="{Binding Label}"
                       VerticalAlignment="Center"
                       Margin="10,0,0,0" />
          </StackPanel>
        </DataTemplate>
      </Window.Resources>
      <Grid>
        <Button ContentTemplate="{StaticResource ImageButton}"
                Content="{StaticResource YourImageButtonHere}"
                Height="50"
                Width="250" />
      </Grid>
</Window>

オブジェクトにリソースを使用しましたが、ViewModel でプロパティを使用できます。結果は次のとおりです。

テキスト付きの画像ボタン

そして、これはただの通常のボタンです。Click イベントの既定のバインドなど、Caliburn.Micro の規則のすべての機能を使用できます。楽しみ!

于 2012-06-05T19:47:12.223 に答える