2

私はWPFを初めて使用し、いくつかのカスタムコントロールを行っています...私の問題は、1つのファイルのコードが非常に多くなるため、コードを別のファイルに分割したいので、他の人がそれを見ていることですコードが圧倒されることはありません。

私の質問にわかりました... ResourceDictionary を取得しました... "Generic.xaml" このファイルでは、DataGrid のテンプレートを取得しました。

    <Style TargetType="{x:Type local:BADataGrid}">
    <Style.Setters>
        <Setter Property="Control.Template">
            <Setter.Value>
                <ControlTemplate TargetType="local:BADataGrid">
                    <Border BorderBrush="{TemplateBinding BorderBrush}" 
                        BorderThickness="{TemplateBinding BorderThickness}"
                        Background="{TemplateBinding Background}" 
                        Padding="{TemplateBinding Padding}" 
                        SnapsToDevicePixels="True">

           <!-- *SOME TEMPLATE CODE* -->

                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="GridStyle" Value="CUSTOMER">
                            <Trigger.Setters>
                                <Setter Property="ColumnHeaderStyle">
                                    <Setter.Value>
                                        <Style TargetType="{x:Type DataGridColumnHeader}">
                                            <Setter Property="Background">
                                                <Setter.Value>
                                                    <ImageBrush>
                                                        <ImageBrush.ImageSource>
                                                            <Binding  Path="HeaderBackground" RelativeSource="{RelativeSource AncestorType=local:BADataGrid}">
                                                                <Binding.TargetNullValue>
                                                                    <ImageSource>
                                                                        headerBack.png
                                                                    </ImageSource>
                                                                </Binding.TargetNullValue>
                                                            </Binding>
                                                        </ImageBrush.ImageSource>
                                                    </ImageBrush>
                                                </Setter.Value>
                                            </Setter>
                                        </Style>
                                    </Setter.Value>
                                </Setter>
                            </Trigger.Setters>
                        </Trigger>
                    </ControlTemplate.Triggers>

                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style.Setters>
</Style>

ここで、上記のコードの「ControlTemplate.Triggers」の部分を別の .XAML ファイルに入れたいと思います。

これは可能ですか?

4

3 に答える 3

0

Resource Dictionariesを調べてください。これにより、ファイル間でスタイルを分割できるようになります。

于 2012-10-22T11:08:16.527 に答える
0

厄介な回避策でそれを行いました...私はそれをあなたと共有します.

DataGrid が読み込まれたときに発生するイベントを実装しました。このイベントでは、ResourceDictionary オブジェクトのコントロール テンプレートに追加したい ResourceDictionary を読み込みます。次に、ResourceDictionary オブジェクトのすべてのエントリを繰り返し処理し、それぞれを個別に ControlTemplate のリソースに追加します。コードは次のとおりです。

void DataGridLoaded(object sender, RoutedEventArgs e)
    {
        BADataGrid dg = (BADataGrid)VisualTreeHelper.GetParent((DependencyObject)sender);


        List<string> resourceList = new List<string>();
        resourceList.Add(Properties.Resources.Customer);

        foreach (string s in resourceList)
        {
            System.Xml.XmlReader xmlReader = new System.Xml.XmlTextReader(new System.IO.StringReader(s));
            ResourceDictionary resource = (ResourceDictionary)XamlReader.Load(xmlReader);

            foreach (System.Collections.DictionaryEntry item in resource)
            {
                dg.Resources.Add(item.Key, item.Value);
            }
        }
于 2012-12-06T16:40:09.147 に答える