1

Theming で Infragistics コントロールを使用しています。テンプレート プロパティはトリガーに設定されます。

そのテンプレートは階層のさらに上に設定されているため、直接編集することはできませんが、プロパティ セットの 1 つを変更したいと考えています。

例えば

トリガーに設定されたテンプレート (切り捨てられた)

<Style x:Key="FxtPaneTabItemStyle" TargetType="{x:Type igDock:PaneTabItem}">
  <Setter Property="TextBlock.TextTrimming" Value="CharacterEllipsis" />
    <Style.Triggers>
      <Trigger Property="igDock:XamDockManager.PaneLocation" Value="Unpinned">
        <Setter Property="Template" Value="{DynamicResource {x:Static igDock:PaneTabItem.DockableTabItemTemplateKey}}" />
      </Trigger>
  </Style.Triggers>
</Style>

到達不能コードで構成されたテンプレート (切り捨てられた)

<ControlTemplate x:Key="{x:Static igDock:PaneTabItem.DockableTabItemTemplateKey}" TargetType="{x:Type igDock:PaneTabItem}">
 <Border x:Name="ctrlBorder" SnapsToDevicePixels="true" MinHeight="25">
  <controls:CardPanel>
  <controls:CardPanel x:Name="Background">
   <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="Auto" Height="25">
    <Border x:Name="Border" Margin="0,0,0,0" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" SnapsToDevicePixels="True"/>
    <Border x:Name="HighlightBorder" Margin="0" BorderBrush="{DynamicResource {x:Static igDock:DockManagerBrushKeys.TabbedListNotActiveInnerBorderFillKey}}" BorderThickness="0" SnapsToDevicePixels="True"/>
   </Grid>
  </controls:CardPanel>
 </Border>
<ControlTemplate.Triggers>
</ControlTemplate.Triggers>

Border (x:Name="ctrlBorder") MinHeight プロパティをオーバーライドしたいだけです。私のコードベースで ControlTemplate 全体を複製しなくても、これは可能ですか? この単一のプロパティを変更しますか?

4

1 に答える 1

0

私の知る限り、テンプレートを変更することはできませんが、そのコントロールを使用したコードにカスタム動作を作成する (またはコード ビハインドのようにコードを追加する) ことができます。

そのコードで、コントロールのビジュアル階層を調べて、名前で境界線を見つけます。プロパティを変更できます。

Loadedイベントがそのオブジェクトに一致した、ビジュアル ツリーで要素 (ケースの境界線) を見つけようとすることが重要です。これは、ビジュアルが既に作成されている必要があるためです。

ビジュアル階層でのビジュアル要素の検索:

        public static List<T> FindVisualChildren<T>(DependencyObject depObj, bool searchWithinAFoundT = true) where T : DependencyObject
        {
            List<T> list = new List<T>();
            if (depObj != null)
            {
                for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
                {
                    DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
                    if (child != null && child is T)
                    {
                        list.Add((T)child);

                        // this means that an element is not expected to contain elements of his type
                        if (!searchWithinAFoundT) { continue; }
                    }

                    List<T> childItems = FindVisualChildren<T>(child, searchWithinAFoundT);
                    if (childItems != null && childItems.Count > 0)
                    {
                        foreach (var item in childItems)
                        {
                            list.Add(item);
                        }
                    }
                }
            }
            return list;
        }

少し汚いですが、特定のケースで役立ちます

于 2016-11-15T17:57:17.357 に答える