0

スタイルが「AutoCompleteTextBox」の単純なTextBoxがあります。

<TextBox Name="TextBox" Style="{StaticResource AutoCompleteTextBox}" />

スタイルは私のリソース辞書にあります:

<Style x:Key="AutoCompleteTextBox" TargetType="{x:Type TextBox}">
    <Setter Property="KeyboardNavigation.TabNavigation" Value="None" />
    <Setter Property="FocusVisualStyle" Value="{x:Null}" />
    <Setter Property="AllowDrop" Value="true" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type TextBox}">
                <Grid>
                    <Border x:Name="Bd" SnapsToDevicePixels="true">
                        <ScrollViewer x:Name="PART_ContentHost" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                    </Border>
                    <Popup x:Name="PART_Popup" StaysOpen="False" Placement="Bottom" IsOpen="False">
                        <ListBox x:Name="PART_ListBox" HorizontalContentAlignment="Stretch"/>
                    </Popup>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

私のCodeBehindFileには、2つのゲッターがあります。

private Popup Popup
{
    get { return Template.FindName("PART_Popup", this) as Popup; }
}
private ListBox ItemList
{
    get { return Template.FindName("PART_ListBox", this) as ListBox; }
}

およびテキストボックスのロードイベント:

void TextBox_Loaded(object sender, RoutedEventArgs e)
{
    var popup = Popup;

    var itemlist = ItemList;
}

今、私は問題を抱えており、常にnullPopupを返します、なぜですか?ItemList

4

3 に答える 3

2

「コード ビハインド」とは、ウィンドウまたはビューのコード ビハインド、つまりテキスト ボックスを含むものを指しているように見えます。したがって、Templateプロパティは、テキスト ボックスではなく、このコンテナーのテンプレートを参照します。コード ビハインドで 2 つのプロパティをサブクラス化TextBoxして公開するか、問題の特定のテキスト ボックスのテンプレートを使用していることを指定します。すなわち:

private Popup Popup
{
    get { return TextBox.Template.FindName("PART_Popup", TextBox) as Popup; }
}
于 2012-09-24T09:16:29.763 に答える
2

XAML では、通常の TextBox を作成してスタイルを設定します。コード ビハインドではthis.Template&thisがあります。thisそれが実際にある方法はありませんTextBox

于 2012-09-24T09:17:18.820 に答える
0

私の場合、それは奇妙な問題です。コードは最初の 2 つのボタンでは問題なく動作しますが、3 番目のボタンでは「プレゼンター」として例外が発生します。オブジェクトがヌルです!

ContentPresenter presenter = new ContentPresenter();
        presenter = buttonUsersSave.Template.FindName("Presenter", buttonUsersSave) as ContentPresenter;
        presenter.Content = "Save";
        presenter = buttonUsersUpdate.Template.FindName("Presenter", buttonUsersUpdate) as ContentPresenter ;
        presenter.Content = "Update";
        presenter = buttonUserAuthSave.Template.FindName("Presenter", buttonUserAuthSave) as ContentPresenter;
        presenter.Content = "Save";
于 2016-06-02T20:53:07.017 に答える