10

試してみるとフォーカスが変わったので、質問を修正しました。問題を次のように絞り込みました...

TreeView の選択した項目を StackPanel (またはユーザー コントロールを保持できる他のコンテナー) にバインドしようとしています。このコンテナーは、選択した項目の種類に応じて、UserControl を表示します。

ここに StackPanel の xaml があります (treeview と stackpanel の両方が同じウィンドウにある ==> 異なるグリッド列)

<StackPanel Grid.Column="2" MinWidth="500" DataContext="{Binding ElementName=myTree, Path=SelectedItem, Mode=OneWay}">
    <StackPanel.Resources>
        <DataTemplate DataType="{x:Type mvTypes:MyTypeA}">
            <controls:UserControlA DataContext="{Binding}" />
        </DataTemplate>
        <DataTemplate DataType="{x:Type mvTypes:MyTypeB}">
            <controls:UserControlB DataContext="{Binding}" />
        </DataTemplate>
    </StackPanel.Resources>
</StackPanel>

(リソースではなく) スタックパネルの直下にユーザー コントロールを配置すると、選択したオブジェクトがデータ コンテキストとして表示されます。その中に TextBox を配置すると、選択したアイテムの正しいタイプが表示されます。

<TextBox Name="textBox1" Text="{Binding}" />

何らかの理由で、(DataType を設定しなくても) DataTemplate 内に配置すると、何も表示されません。

任意の提案。このようなコンテナーとして適切に見える他のコントロールを見つけることができないようですが、おそらく StackPanel はこれに適したコントロールではないと考えています。

前もって感謝します。

4

3 に答える 3

11

例の StackPanel を ContentPresenter に置き換え、DataContext の代わりに Content プロパティを設定します。それはうまくいくはずです。

于 2009-07-20T18:41:58.140 に答える
0

2 番目のカスタム コントロールに Binding を設定しましたが、DataContext を設定していますか? バインディングは情報へのルートであり、DataContext はこのバインディング情報を適用する情報であるためです。

アンドリュー

于 2009-07-20T07:34:53.527 に答える
0

TreeView と右側の選択情報をすべて 1 つに表示する UserControl を作成できます。これにより、カスタム コントロールを作成する必要がなくなります。以前に存在しなかったものは何も作成しないため、カスタム コントロールは基本的に不要です。

<UserControl x:Class="NameSpace.SelectionView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:controls="namespace.Controls"
    Height="300" Width="300">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <TreeView Name="customTree">
            <!--Items go here-->
        </TreeView>
        <StackPanel Grid.Column="1" MinWidth="50" DataContext="{Binding ElementName=customTree, Path=SelectedItem, Mode=OneWay}">
            <StackPanel.Resources>
                <DataTemplate DataType="{x:Type StylingTest:CustomViewModelA}">
                    <controls:CustomADetailsControl />
                </DataTemplate>
                <DataTemplate DataType="{x:Type StylingTest:CustomViewModelB}">
                    <controls:CustomBDetailsControl />
                </DataTemplate>
            </StackPanel.Resources>
            <TextBlock Text="{Binding}"/>
        </StackPanel>
    </Grid>
</UserControl>

他のカスタム動作は、ここでスタイル/テンプレートを作成または設定できると確信しています。

また、私の他の回答の 1 つが役に立つと思うかもしれません。

wpfで頑張ってください、乾杯。

于 2009-07-20T10:10:35.740 に答える