0

データバインドされた WPF に ComboBox があり、各項目の表示方法を制御するデータ テンプレートがあります。各項目が 2 ビットのテキスト (Name および Path プロパティ用) と 1 つの画像 (Icon プロパティ用) で表示されるようにしました。

ComboBox から項目を選択すると、ComboBox のテキスト ボックス ビットが「TestWPF.Result」に変わります。これは、ComboBox に入力したクラスの名前です。

次の 2 つのいずれか (または両方) に興味があります。

  1. そこにフィールドの1つの値を表示するように変更するにはどうすればよいですか(たとえば、クラスの名前ではなく名前フィールドの値を表示するようにします)?

  2. アイテムのリストと同じ DataTemplate を使用することは可能ですか?アイテムを選択すると、アイテムのリストに表示されるのと同じように、閉じた ComboBox に表示されます。基本的に、ShowResults という DataTemplate と、そのテンプレートを使用する ComboBox があります。ComboBox で選択したアイテムの詳細を表示する必要がある別の ContentControl も追加しましたが、ComboBox のテキスト ボックスを置き換えるためにそれを取得したいと考えています。

アップデート:

最初の答えをありがとう。あなたが説明したように、別の ContentControl を使用してみましたが、正常に動作します。問題は、ComboBox のテキストボックス部分をこの ContentControl に置き換える方法です。それに関するヒントは大歓迎です。

また、ComboBox コントロールのテキストボックス ビットを ContentControl とテキストボックスの混合物に置き換えて、テキスト ボックスに入力して ComboBox から項目を選択することはできますが、ドロップダウンを閉じると残りの部分が表示されます。 ContentControl ビットには、残りのテキストとアイコンが取り込まれます。それが理にかなっていることを願っています-そうでない場合は質問してください!

コード:

コードを投稿するように求められたので、ここに掲載します。絶対に関連性がないことがわかっているものは削除しようとしましたが、何が関連性があるか正確にはわからないので、疑わしい場合は残しました.

<Window x:Class="TestWPF.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:custom="clr-namespace:TestWPF"
Title="Window1" Height="300" Width="843" Loaded="Window_Loaded">
<Window.Resources>
    <DataTemplate x:Key="ShowResult" DataType="TestWPF.Result">
        <StackPanel Margin="5" Orientation="Horizontal">
            <Image Width="32" Height="32"  Source="{Binding Path=Image}"/>
            <StackPanel Margin="5">
                <TextBlock FontWeight="Bold" Text="{Binding Path=Name}"/>                    
                <TextBlock Text="{Binding Path=Path}"/>
            </StackPanel>
        </StackPanel>
    </DataTemplate>
</Window.Resources>

<Grid Width="786">
    <Button Height="23" HorizontalAlignment="Right" Margin="0,24,166,0" Name="btnTest" VerticalAlignment="Top" Width="75" Click="btnTest_Click">Add</Button>
    <ComboBox StaysOpenOnEdit="True"  DropDownClosed="comboBox1_DropDownClosed" PreviewTextInput="comboBox1_PreviewTextInput" SelectionChanged="comboBox1_SelectionChanged" ItemTemplate="{StaticResource ShowResult}"  Margin="259,109,22,89" Name="comboBox1" IsEditable="True" />
    <ContentControl Height="50" Margin="268,0,22,21" Name="contentControl1" VerticalAlignment="Bottom" Content="{Binding ElementName=comboBox1,Path=SelectedValue}" ContentTemplate="{StaticResource ShowResult}"/>
</Grid>

4

2 に答える 2

0

プロパティ バインディング式を textBox に配置するだけで、テンプレートを適用する必要はありません。

正確なデータ テンプレートを取得する別の方法として、ContentControl を textBox の代わりに配置し、同じ DataTemplate を割り当てます (x:Name="robinTemplate" など)。

<ContentControl Content="{Binding ElementName=cmbBox,Path=SelectedValue}" ContentTemplate="{StaticResource robinTemplate}"/>

選択したコンテンツを同じ方法で表示するには: コンボボックス コントロール テンプレートのコピーを作成すると、そこに ContentPresenter があります。それを ContentControl に置き換えます。ただし、これは正しい解決策ではありません。

于 2009-02-06T19:13:05.177 に答える