1

Windows 8 XAML でカスタム テキスト ボックス コントロールを作成しようとしています。

プロジェクトを右クリック -> 追加 -> 新しいアイテム

次に、テンプレート化されたコントロールを選択し、MyTextBox という名前を入力しました

次に、このクラスを TextBox から派生させ、Hello というテスト メソッドを追加しました。したがって、次のようになります。

public sealed class MyTextBox : TextBox
{
    public MyTextBox()
    {
        this.DefaultStyleKey = typeof(MyTextBox);
    }

    public void Hello()
    {
        //Do something here!
    }
}

私のプロジェクト内には、次のスタイルの Generic.xaml というファイルも追加されています。

<Style TargetType="local:MyTextBox">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="local:MyTextBox">
                <Border
                    Background="{TemplateBinding Background}"
                    BorderBrush="{TemplateBinding BorderBrush}"
                    BorderThickness="{TemplateBinding BorderThickness}">
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

そのため、ここに Style タグを使用して BasedOn="TextBox" を追加してみました。

<Style TargetType="local:WatermarkTextBox" BasedOn="TextBox">

これはうまくいきません。

このカスタム TextBox を作成するには何をする必要があり、XAML 内でどのように使用するのですか?

これは Windows RT 用であるため、XAML は WPF とは異なる場合があります。

4

2 に答える 2

2

最高の記事の 1 つであり、私のお気に入り: Build a deployable custom control for XAML Metro style apps

MSDN サンプル アプリは次のとおりです: XAML ユーザーとカスタム コントロールのサンプル

更新 1:

<Style TargetType="local:WatermarkTextBox" BasedOn="TextBox">

BasedOn属性を指定する必要はありません。透かしテキスト ボックスを開発している場合は、Callisto の透かしテキスト ボックスのコードを確認することをお勧めします。

Generic.xaml

WatermarkTextBox.cs

于 2013-04-10T13:58:44.893 に答える
0

BasedOn 値は、次のように StaticResources を介して指すことができますBasedOn={StaticResource DefaultTextBoxStyle}

NumericOnlyTextBox の実装があります。BasedOn テキストボックスにする代わりに、テキストボックスとそのすべての依存関係を追加しました。

例:

<Style TargetType="local:NumericOnlyTextBox">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="local:NumericOnlyTextBox">
                <Border Background="{TemplateBinding Background}"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}">
                    <StackPanel>
                        <TextBox x:Name="TextBoxPart"
                             Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=EnteredText, Mode=TwoWay}"
                             MaxLength="{TemplateBinding MaxLength}">
                        </TextBox>                            
                    </StackPanel>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="IsTabStop" Value="False"></Setter>
</Style>
于 2013-04-10T13:57:58.363 に答える