0

http://www.telerik.com/のようなカスタム コントロールを開発するためのビデオ、チュートリアル、書籍などの情報を探しています。

これは、カスタム コントロールを開発したいということです。たとえば、Expander を考えてみましょう。

これは私のエキスパンダーコードです:

<UserControl x:Class="PhoneApp16.Expander"
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}"
d:DesignHeight="480" d:DesignWidth="480">

<Grid x:Name="LayoutRoot" Background="{StaticResource PhoneChromeBrush}">
    <Grid.RowDefinitions>
        <RowDefinition Height="50"/>
        <RowDefinition Height="auto"/>
    </Grid.RowDefinitions>
    <Rectangle Fill="Wheat"/>
    <StackPanel Grid.Row="1"/>
</Grid>

これは、メインフォームでどのように見えるかです:

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
        <local:Expander HorizontalAlignment="Left" VerticalAlignment="Top" Width="456"/>
</Grid>

しかし、次のような独自のプロパティを追加したい:

IsExpanded=true/false which sets Expanders StackPanel visibility to visible or collapsed

ValueConverters については知っていますが、エキスパンダーの XAML でこのプロパティを実現する方法は次のようになります。

<local:Expander IsExpanded="false" HorizontalAlignment="Left" VerticalAlignment="Top" Width="456"/>

書籍、ビデオなどへのリンクを歓迎します。何よりも最初から (ダミーの場合)。

4

1 に答える 1

0

ユーザー コントロールのコード ベニンドに DependencyProperties を追加する必要があります。たとえば、次の XAML がユーザー コントロールであるとします。

<UserControl 
    x:Class="MyProject.Data.Controls.Elements.Editors.Select"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Name="Root">

    <Grid>

        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="120"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>

        <Border 
            Grid.Column="0"
            CornerRadius="0,0,0,0">

            <TextBlock
                x:Name="MyBlock"
                TextTrimming="CharacterEllipsis"
                Text="{Binding ElementName=Root, Path=Label, Mode=OneWay}"
                VerticalAlignment="Center"
                HorizontalAlignment="Stretch"
                FontSize="12"
                TextAlignment="Right"
                FontFamily="Segoe UI Semibold"
                Margin="4,0,4,0"/>

        </Border>

    </Grid>

</UserControl>

コードビハインドは次のとおりです。

public partial class Select : UserControl
{
    /// <summary>
    /// 
    /// </summary>
    public Select()
    {
        InitializeComponent();
    }

    /// <summary>
    /// 
    /// </summary>
    public string Label
    {
        get { return (string)GetValue(LabelProperty); }
        set { SetValue(LabelProperty, value); }
    }

    /// <summary>
    /// Identifies the <see cref="Label"/> dependency property.
    /// </summary>
    public static readonly DependencyProperty LabelProperty =
    DependencyProperty.Register("Label", typeof(string), typeof(Select), new PropertyMetadata(string.Empty));

}

これで、フォームでコントロールの Label プロパティを設定できるようになりました。設定すると、この値は MyBlock という名前の TextBlock の Text プロパティに渡されます。

依存関係プロパティを作成することが重要です。そうしないと、バインディングが機能しません。

ここに良い参考書があります: WPF Control Development Unleashed: Building Advanced User Experiences

MSDN に加えて、いくつかのビデオとトレーニング資料があります。

http://msdn.microsoft.com/en-us/vstudio/aa496123

于 2013-10-02T10:26:21.830 に答える