0

WinRT に対する最初のカスタム ユーザー コントロールを作成していますが、問題が発生しました。

画像 PART_NwBadge を公開したいと思います。これは、コントロールの依存関係プロパティとして表示されます。次に、スタイルのセッターを介してデフォルト値を提供したいと思います。この部分は機能していません。代わりに、DependencyProperty (BadgedButton.cs 内) の既定値が適用されます。

私が説明したことを行うことさえ可能ですか?または、C# コードで既定値を設定する必要がありますか? C# コードで値を設定する必要がある場合、コードで画像リソースを読み込む方法について誰かコメントしてくれませんか? かなりの量の検索を行った後、私はまだうまくいく解決策を見つけていません。

最後に、これはカスタム コントロールを作成する最初の本格的な試みであるため、問題に直接関係していない場合でも、改善できる点があれば提案してください。

Windows 8 コンシューマー プレビュー
C#/WinRT/Metro
Visual Studio 11 ベータ版

テーマ/Generic.xaml

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:l="using:InkSdkTestApplication.Controls">

    <Style TargetType="l:BadgedButton">
        <Setter Property="Width" Value="36"/>
        <Setter Property="Height" Value="36"/>
        <Setter Property="Background" Value="#1C1C1C"/>
        <Setter Property="BorderBrush" Value="White"/>
        <Setter Property="BorderThickness" Value="2"/>
        <Setter Property="NwBadge">
            <Setter.Value>
                <Image Width="16" Height="16" Source="../Assets/mouse_16x16.png"/>            
            </Setter.Value>
        </Setter>
        <Setter Property="NwBadgeVisibility" Value="Collapsed"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="l:BadgedButton">
                    <Border x:Name="PART_Border"
                            Width="{TemplateBinding Width}"
                            Height="{TemplateBinding Height}"
                            Background="{TemplateBinding Background}"
                            BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="{TemplateBinding BorderThickness}">

                        <Grid>
                            <ContentPresenter x:Name="PART_Content"
                                              HorizontalAlignment="Center"
                                              VerticalAlignment="Center"
                                              Content="{TemplateBinding Content}"/>

                            <Image x:Name="PART_NwBadge"
                                   HorizontalAlignment="Left"
                                   VerticalAlignment="Top"
                                   Width="16" Height="16"
                                   Visibility="{TemplateBinding NwBadgeVisibility}"
                                   Source="{TemplateBinding NwBadge}"/>
                        </Grid>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>

コントロール/BadgedButton.cs

namespace InkSdkTestApplication.Controls
{
    public sealed class BadgedButton : Control
    {
        #region // Dependency Properties
        public static DependencyProperty ContentProperty =
            DependencyProperty.Register(
                "Content",
                typeof(FrameworkElement),
                typeof(BadgedButton),
                new PropertyMetadata(null));

        public static DependencyProperty NwBadgeProperty =
            DependencyProperty.Register(
                "NwBadge",
                typeof(Image),
                typeof(BadgedButton),
                new PropertyMetadata(null));

        public static DependencyProperty NwBadgeVisibilityProperty =
            DependencyProperty.Register(
                "NwBadgeVisibility",
                typeof(Visibility),
                typeof(BadgedButton),
                new PropertyMetadata(Visibility.Visible));
        #endregion

        #region // Public Properties
        public FrameworkElement Content
        {
            get { return (FrameworkElement)GetValue(ContentProperty); }
            set { SetValue(ContentProperty, value); }
        }

        public Image NwBadge
        {
            get { return (Image)GetValue(NwBadgeProperty); }
            set { SetValue(NwBadgeProperty, value); }
        }

        public Visibility NwBadgeVisibility
        {
            get { return (Visibility)GetValue(NwBadgeVisibilityProperty); }
            set { SetValue(NwBadgeVisibilityProperty, value); }
        }
        #endregion

        public BadgedButton()
        {
            this.DefaultStyleKey = typeof(BadgedButton);
        }
    }
}
4

1 に答える 1

3

http://timheuer.com/blog/archive/2012/03/07/creating-custom-controls-for-metro-style-apps.aspx

于 2012-05-08T16:52:37.910 に答える