2

コード内で動的に作成するTreeViewItemと、関連するスタイルで指定されていても、コンテンツの配置に関連するバインディング エラーが発生します。

TreeViewItem tvi = new TreeViewItem() 
{
    Header = "aString", 
    Style = wpfElement.FindResource("tviRoot") as Style 
};

私が得るエラーは

System.Windows.Data 情報: 10 : バインディングを使用して値を取得できず、有効なフォールバック値が存在しません。代わりにデフォルトを使用します。BindingExpression:Path=Horizo​​ntalContentAlignment; DataItem=null; ターゲット要素は 'TreeViewItem' (Name='') です。ターゲット プロパティは 'Horizo​​ntalContentAlignment' (タイプ 'Horizo​​ntalAlignment') です

(および垂直方向の配置についても同様です)

このエラーが発生する理由がよくわかりません (私は WPF に精通していません)。奇妙なことに、すべてが期待どおりに機能しているように見えますが、これらのエラーによって依然として大幅に速度が低下しています。誰か助けてくれませんか?

編集: スタイル プロパティにスタブ名を付けましたが、それは問題ではないと思いました。名前を変更し、その定義を以下に含めました:tviRootに基づくtviBaseStyle

<Style TargetType="TreeViewItem" x:Key="tviBaseStyle">

    <Setter Property="HorizontalContentAlignment" Value="Center" />
    <Setter Property="VerticalContentAlignment" Value="Top" />
    <Setter Property="HorizontalAlignment" Value="Stretch" />
    <Setter Property="VerticalAlignment" Value="Top" />

    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="TreeViewItem">
                <Grid Margin="0">
                    <Grid.RowDefinitions>
                        <!--The top row contains the item's content.-->
                        <RowDefinition Height="{StaticResource rowHeight}" />
                        <!--The bottom row contains the item's children.-->
                        <RowDefinition Height="*" />
                    </Grid.RowDefinitions>
                    <!-- This Border and ContentPresenter displays the content of the TreeViewItem. -->
                    <Border Name="Bd" Margin="0" Padding="0"
                            Background="White" BorderBrush="Gray" BorderThickness="1" CornerRadius="2"
                            TextElement.FontSize="{StaticResource fontSize}"
                            TextElement.FontFamily="{StaticResource fontFamily}">
                        <ContentPresenter ContentSource="Header" HorizontalAlignment="Center" VerticalAlignment="Center" />
                    </Border>
                    <!-- The ItemsPresenter displays the item's children. -->
                    <ItemsPresenter Grid.Row="1"/>
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter TargetName="Bd" Property="Border.BorderBrush" Value="Red" />
                        <Setter TargetName="Bd" Property="Border.BorderThickness" Value="1"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <!-- Make each TreeViewItem show its children in a horizontal StackPanel. -->
    <Setter Property="ItemsPanel">
        <Setter.Value>
            <ItemsPanelTemplate>
                <StackPanel HorizontalAlignment="Center" IsItemsHost="True" Margin="0" Orientation="Horizontal"  />
            </ItemsPanelTemplate>
        </Setter.Value>
    </Setter>
</Style>
<Style x:Key="tviRoot" TargetType="TreeViewItem" BasedOn="{StaticResource tviBaseStyle}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="TreeViewItem">
                <Grid Margin="10">
                    <Grid.RowDefinitions>
                        <!--The top row contains the item's content.-->
                        <RowDefinition Height="{StaticResource rowHeight}" />
                        <!--The bottom row contains the item's children.-->
                        <RowDefinition Height="*" />
                    </Grid.RowDefinitions>
                    <!-- This Border and ContentPresenter displays the content of the TreeViewItem. -->
                    <Border Name="Bd" Margin="0" Padding="0"
                            Background="{StaticResource rootGradient}" BorderBrush="Black" BorderThickness="2" CornerRadius="2"
                            TextElement.FontSize="{StaticResource fontSize}"
                            TextElement.FontWeight="Bold"
                            TextElement.FontFamily="{StaticResource fontFamily}">
                        <ContentPresenter ContentSource="Header" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                    </Border>
                    <!-- The ItemsPresenter displays the item's children. -->
                    <ItemsPresenter Grid.Row="1"/>
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter TargetName="Bd" Property="Border.BorderBrush" Value="Red" />
                        <Setter TargetName="Bd" Property="Border.Background" Value="{StaticResource rootGradientSelected}"/>
                        <Setter TargetName="Bd" Property="TextElement.Foreground" Value="Yellow"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <!-- Make each TreeViewItem show its children in a horizontal StackPanel. -->
    <Setter Property="ItemsPanel">
        <Setter.Value>
            <ItemsPanelTemplate>
                <StackPanel HorizontalAlignment="Center" IsItemsHost="True" Margin="0" Orientation="Horizontal"  />
            </ItemsPanelTemplate>
        </Setter.Value>
    </Setter>
</Style>
4

1 に答える 1

0

さて、作成引数の順序を変更すると、エラーが解消されました。( を関連付ける前にTreeViewItem'sHeader属性を設定したと思いStyleます。それが問題の原因でした..?)アプリケーションでこれらのエラーがさらに多く発生したため、新しいエラーが発生しなかったかどうかはまだわかりません別の場所にポップアップします。

于 2013-08-10T15:54:10.463 に答える