0

これは本当の初心者の質問だと確信しています。私はそれを検索する方法を理解するのに苦労しています。

3つのコントロールしかない単純なUserControl(MyNewControl)があり、そのうちの1つは次のラベルです。

<sdk:Label x:Name="Title" />

次に、別のコントロールで、次のようにMyNewControlを使用します。

<local:MyNewControl Grid.Column="1" x:Name="MyNewGuy" />

この2番目のコントロールで、たとえば、タイトルラベルのグラデーションの背景を設定できるようにするには、何をする必要がありますか?

4

2 に答える 2

1

まず、UserControlで目的の依存関係プロパティを定義します。

public partial class MyUserControl : UserControl
{
    public Brush LabelBackground
    {
        get { return (Brush)GetValue(LabelBackgroundProperty); }
        set { SetValue(LabelBackgroundProperty, value); }
    }
    public static readonly DependencyProperty LabelBackgroundProperty =
        DependencyProperty.Register("LabelBackground", typeof(Brush), typeof(MyUserControl), new PropertyMetadata(null));

    public MyUserControl()
    {
        InitializeComponent();
    }
}

プロパティの値を子ラベルに割り当てるには、バインディングのElementNameプロパティを使用してバインドできます。

<UserControl x:Class="SilverlightApplication1.MyUserControl"
         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"
         xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"
         d:DesignHeight="300"
         d:DesignWidth="400"
         mc:Ignorable="d"
         x:Name="UserControl"
         >

<Grid x:Name="LayoutRoot">
    <sdk:Label x:Name="Title"
               HorizontalAlignment="Center"
               VerticalAlignment="Center" Content="Title" Background="{Binding LabelBackground, ElementName=UserControl}" />
</Grid>
</UserControl>

Silverlight 5を使用しているため、UserControlに内部的に名前を付ける代わりに、 RelativeSourceをバインディングに設定することもできます。

<sdk:Label Background="{Binding LabelBackground, RelativeSource={RelativeSource AncestorType=UserControl}}" />

次に、UserControlを使用するときに、LabelBackgroundを目的の値に設定(またはバインド)します。

<local:MyUserControl LabelBackground="Red"/>

ちなみに、UserControlの代わりにCustomControlを作成し、同じ方法で依存関係プロパティを追加して、テンプレートを定義するときにTemplateBindingを使用することもできます。

于 2012-12-14T14:50:05.860 に答える
0

カスタムコントロールの依存関係プロパティを使用してこれを行うことができます。LableBGをカスタムコントロールの依存関係プロパティとして定義し、xamlで定義されたLabelコントロールの背景を使用してバインドを行ったとします。また、カスタムコントロールを別のコントロールで使用する場合は、xamlまたはコードビハインドからそのLableBGを設定できます。

注:定義された依存関係プロパティのタイプはBrushである必要があります

例:

カスタムコントロールのcsファイルでの依存関係プロパティの定義:

/1. Declare the dependency property as static, readonly field in your class.
    public static readonly DependencyProperty LableBGProperty = DependencyProperty.Register(
        "LableBG",                      //Property name
        typeof(Brush),                  //Property type
        typeof(MySilverlightControl),   //Type of the dependency property provider
        null );//Callback invoked on property value has changes

<sdk:Label x:Name="Title" Background="{Binding LableBG }" /> (Custom Control)


<local:MyNewControl Grid.Column="1" x:Name="MyNewGuy" LableBG="Red" /> (Another control)
于 2012-12-14T12:16:24.830 に答える