3

次のような userControl があります。

<Grid x:Name="LayoutRoot" Background="Transparent">
    <Image Source="/Images/btn1_normal@2x.png" Stretch="Fill" />
    <TextBlock x:Name="Text" Text="Button" Foreground="Black"
               VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Grid>

この userControl を別の XAML で次のように使用します。

<MyControlls:MyButton Width="90" Height="55"/>

この XAML で Text という名前の textBlock にアクセスして、テキストを変更するにはどうすればよいでしょうか (Windows phone 8 で)。このようなもの:

<MyControlls:MyButton Width="90" Height="55">
    <MyButton.Text Text="Hello World!" />        
</MyControlls:MyButton>`

ありがとうございました。

4

3 に答える 3

8

解決策を見つけました。

<UserControl x:Class="Becel.Controls.MyButton"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
x:Name="MyUserControll">

<Grid x:Name="LayoutRoot" Background="Transparent">
    <Image x:Name="myImage" Source="/Images/btn1.9_normal@2x.png" Stretch="Fill"
MouseEnter="Image_MouseEnter" MouseLeave="Image_MouseLeave" />
    <TextBlock x:Name="textTitle" Text="{Binding Title, ElementName=MyUserControll}" VerticalAlignment="Center" HorizontalAlignment="Center" TextAlignment="Center" Foreground="Black" FontSize="25"  MouseEnter="Image_MouseEnter" MouseLeave="Image_MouseLeave"/>

</Grid>
</UserControl>

そしてC#コードで:

public static readonly DependencyProperty TitleProperty = DependencyProperty.Register("Title", typeof (String), typeof(MyButton),null);

    public String Title
    {
        get { return (String)GetValue(TitleProperty); }
        set { SetValue(TitleProperty, value); }
    }

そして、どこでも次のように使用できます。

<MyUserControl:MyButton Width="90" Height="55" Margin="10 0 0 0" Title="Hello Wold!" />
于 2013-10-21T11:27:14.317 に答える
4

それを直接行うことはできません。ここに 2 つの選択肢があります。

解決策 1 : ViewModel を使用する

ビュー モデル クラスを使用して、カスタム コントロールに表示する必要があるプロパティを格納します。

class MyButtonViewModel
{
    public string Text { get;set; }
}

MyButton.xaml:

<TextBlock Text={Binding Text} ...

MainWindow.xaml

<Window.Resources>
    <MyButtonViewModel x:Key="myButtonVm" Text="Hello!" />
</Window.Resources>

<MyButton DataContext={StaticResource myButtonVm} />

これは MVVM パターンを使用します。使用したことがない場合は、Model-View-ViewModel デザイン パターンを使用した WPF アプリを参照してください。

解決策 2 : CustomControl を使用する

UserControlを に置き換えますCustomControl。その場合Text、依存関係プロパティにすることができるので、書くことができます。

<MyButton Text="Hello !" />

これははるかに複雑です。WPF カスタム コントロールの作成方法 を参照してください。

どちらを選ぶ?

コントロールを複数の異なるプロジェクトで使用する予定で、コントロールのスキンを変更できるようにする必要がある場合は、UserControl.

それ以外の場合はViewModel、最終的に残りのプロジェクトに MVVM パターンを適用します。

于 2013-10-21T10:41:07.900 に答える
1

このタスクを達成するための 1 つの解決策は、依存関係プロパティControl("MyButton" と呼ばれる) コード ビハインドに宣言することです。

  public string ButtonText
  {
    get { return (string )this.GetValue(ButtonTextProperty); }
    set { this.SetValue(ButtonTextProperty, value); } 
  }
  public static readonly DependencyProperty ButtonTextProperty = DependencyProperty.Register(
    "ButtonText", typeof(string), typeof(MyButton),new PropertyMetadata(false));

次に、xaml コードにバインドする必要があります。

  <YourControl x:Name="MyButtonName">
    ... // some xaml code
    <Grid x:Name="LayoutRoot" Background="Transparent">
        <Image Source="/Images/btn1_normal@2x.png" Stretch="Fill" />
        <TextBlock x:Name="Text" Text="Button" Foreground="Black"
                   VerticalAlignment="Center" HorizontalAlignment="Center"
                   Text="{Binding Path=ButtonText, ElementName=MyButtonName}"/>
    </Grid>
 </YourControl>

最後に、「MyButton」を使用できますControl

<MyControlls:MyButton Width="90" Height="55" ButtonText="Hello World!">
</MyControlls:MyButton>
于 2013-10-21T10:32:42.613 に答える