3

HierarchicalDataTemplateそのようにツリー項目にアイコンを追加するために を適用しました:

  <TreeView.ItemTemplate>
            <HierarchicalDataTemplate DataType="{x:Type DataAccess:IDataAccessible}" 
                                  ItemsSource="{Binding Path=Items}">                    
                    <StackPanel Orientation="Horizontal" Margin="2" DataContext="{Binding}">
                        <Image Width="16" Height="16" SnapsToDevicePixels="True"
                           Source="{Binding Converter={StaticResource treeImageConverter}}">
                    </Image>
                        <TextBlock Text="{Binding Path=Name}" Margin="5,0" />
                    </StackPanel>                    
            </HierarchicalDataTemplate>
        </TreeView.ItemTemplate>

そしてItemContainerStyle、矢印ボタンを非表示にするために追加しました:

 <TreeView.ItemContainerStyle>
            <Style TargetType="TreeViewItem">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="TreeViewItem" xmlns:s="clr-namespace:System;assembly=mscorlib">
                            <Grid>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="Auto" MinWidth="19" />
                                    <ColumnDefinition Width="Auto" />
                                    <ColumnDefinition Width="*" />
                                </Grid.ColumnDefinitions>
                                <Grid.RowDefinitions>
                                    <RowDefinition Height="Auto" />
                                    <RowDefinition />
                                </Grid.RowDefinitions>
                                <!-- Make the ToggleButton invisible -->
                                <ToggleButton IsChecked="False" Visibility="Hidden" ClickMode="Press" Name="Expander" >

                                </ToggleButton>
                                <Border BorderThickness="{TemplateBinding Border.BorderThickness}" Padding="{TemplateBinding Control.Padding}" BorderBrush="{TemplateBinding Border.BorderBrush}" Background="{TemplateBinding Panel.Background}" Name="Bd" SnapsToDevicePixels="True" Grid.Column="1">
                                    <ContentPresenter Content="{TemplateBinding HeaderedContentControl.Header}" ContentTemplate="{TemplateBinding HeaderedContentControl.HeaderTemplate}" ContentStringFormat="{TemplateBinding HeaderedItemsControl.HeaderStringFormat}" ContentSource="Header" Name="PART_Header" HorizontalAlignment="{TemplateBinding Control.HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}" />
                                </Border>
                                <ItemsPresenter Name="ItemsHost" Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="2" />
                            </Grid>
                            <ControlTemplate.Triggers>
                                <Trigger Property="ItemsControl.HasItems">
                                    <Setter Property="UIElement.Visibility" TargetName="Expander">
                                        <Setter.Value>
                                            <x:Static Member="Visibility.Hidden" />
                                        </Setter.Value>
                                    </Setter>
                                    <Trigger.Value>
                                        <s:Boolean>False</s:Boolean>
                                    </Trigger.Value>
                                </Trigger>
                                <Trigger Property="TreeViewItem.IsSelected">
                                    <Setter Property="Panel.Background" TargetName="Bd">
                                        <Setter.Value>
                                            <DynamicResource ResourceKey="{x:Static SystemColors.HighlightBrushKey}" />
                                        </Setter.Value>
                                    </Setter>
                                    <Setter Property="TextElement.Foreground">
                                        <Setter.Value>
                                            <DynamicResource ResourceKey="{x:Static SystemColors.HighlightTextBrushKey}" />
                                        </Setter.Value>
                                    </Setter>
                                    <Trigger.Value>
                                        <s:Boolean>True</s:Boolean>
                                    </Trigger.Value>
                                </Trigger>
                                <MultiTrigger>
                                    <MultiTrigger.Conditions>
                                        <Condition Property="TreeViewItem.IsSelected">
                                            <Condition.Value>
                                                <s:Boolean>True</s:Boolean>
                                            </Condition.Value>
                                        </Condition>
                                        <Condition Property="Selector.IsSelectionActive">
                                            <Condition.Value>
                                                <s:Boolean>False</s:Boolean>
                                            </Condition.Value>
                                        </Condition>
                                    </MultiTrigger.Conditions>
                                    <Setter Property="Panel.Background" TargetName="Bd">
                                        <Setter.Value>
                                            <DynamicResource ResourceKey="{x:Static SystemColors.ControlBrushKey}" />
                                        </Setter.Value>
                                    </Setter>
                                    <Setter Property="TextElement.Foreground">
                                        <Setter.Value>
                                            <DynamicResource ResourceKey="{x:Static SystemColors.ControlTextBrushKey}" />
                                        </Setter.Value>
                                    </Setter>
                                </MultiTrigger>
                                <Trigger Property="UIElement.IsEnabled">
                                    <Setter Property="TextElement.Foreground">
                                        <Setter.Value>
                                            <DynamicResource ResourceKey="{x:Static SystemColors.GrayTextBrushKey}" />
                                        </Setter.Value>
                                    </Setter>
                                    <Trigger.Value>
                                        <s:Boolean>False</s:Boolean>
                                    </Trigger.Value>
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </TreeView.ItemContainerStyle>

そして、それは前後にどのように見えるかです: ここに画像の説明を入力

この品質低下の理由は何でしょうか?

4

1 に答える 1

2

LayoutRoundingプロパティを true に設定します。これは、レイアウトの計算後に位置を画面のピクセルに直接マッピングできず、色の値が 2 つの表示ピクセルににじみ出た場合に発生します。y=3 に配置された水平線を考えてみましょう。これはその線を完全な色で塗りつぶします。y=3.5 に配置すると、3 で線を半分、4 で半分を塗りつぶす必要があります。しかし、半分はありません。ピクセルは明らかに、それが線の間の色をブレンドする理由です。したがって、通常は y 3 と 4 で半透明の線が得られます。

このサブピクセル レンダリングによりすべてが少し滑らかに見えるため、アニメーションでは特に望ましい場合がありますが、アイコンの場合、これは通常望ましくありません。

于 2013-09-04T13:29:42.410 に答える