Как изменить границу элемента списка при использовании предопределенного шаблона

Я использую одну из определенных тем wpf для своего приложения, поэтому все мои элементы управления автоматически изменяются в соответствии с этой темой.

Теперь я заполняю список элементами (пользовательскими элементами управления), но не все они должны быть видны все время. Но когда я устанавливаю высоту на 0 (пользовательского управления) или устанавливаю невидимость, я получаю толстую серую границу элементов списка.

Может ли кто-нибудь помочь мне переопределить границу элемента списка или показать мне, где в шаблоне мне нужно изменить границу, потому что я просто не могу ее найти.

Это часть шаблона для элемента списка:

<Style d:IsControlPart="True" TargetType="{x:Type ListBoxItem}">
    <Setter Property="SnapsToDevicePixels" Value="true"/>
    <Setter Property="OverridesDefaultStyle" Value="false"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ListBoxItem}">
                <ControlTemplate.Resources>
                    <Storyboard x:Key="HoverOn">
                        <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="HoverRectangle" Storyboard.TargetProperty="(UIElement.Opacity)">
                            <SplineDoubleKeyFrame KeyTime="00:00:00.2000000" Value="1"/>
                        </DoubleAnimationUsingKeyFrames>
                    </Storyboard>
                    <Storyboard x:Key="HoverOff">
                        <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="HoverRectangle" Storyboard.TargetProperty="(UIElement.Opacity)">
                            <SplineDoubleKeyFrame KeyTime="00:00:00.3000000" Value="0" />
                        </DoubleAnimationUsingKeyFrames>
                    </Storyboard>
                    <Storyboard x:Key="SelectedOn">
                        <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="SelectedRectangle" Storyboard.TargetProperty="(UIElement.Opacity)">
                            <SplineDoubleKeyFrame KeyTime="00:00:00.2000000" Value="1"/>
                        </DoubleAnimationUsingKeyFrames>
                    </Storyboard>
                    <Storyboard x:Key="SelectedOff">
                        <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="SelectedRectangle" Storyboard.TargetProperty="(UIElement.Opacity)">
                            <SplineDoubleKeyFrame KeyTime="00:00:00.3000000" Value="0" />
                        </DoubleAnimationUsingKeyFrames>
                    </Storyboard>
                </ControlTemplate.Resources>
                <Grid Background="{TemplateBinding Background}"
                    Margin="1,1,1,1" SnapsToDevicePixels="true" x:Name="grid">
                    <Rectangle x:Name="Background"
                        IsHitTestVisible="False"
                        Fill="{StaticResource SelectedBackgroundBrush}"
                        RadiusX="0"/>
                    <Rectangle x:Name="SelectedRectangle"
                        IsHitTestVisible="False"
                        Opacity="0"
                        Fill="{StaticResource NormalBrush}"
                        RadiusX="0"/>
                    <Rectangle x:Name="HoverRectangle"
                        IsHitTestVisible="False"
                        Fill="{StaticResource HoverBrush}"
                        RadiusX="0"
                        Opacity="0"/>
                    <ContentPresenter Margin="5,3,3,3" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" x:Name="contentPresenter"/>
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="true">
                        <Trigger.EnterActions>
                            <BeginStoryboard Storyboard="{StaticResource HoverOn}"/>
                        </Trigger.EnterActions>
                        <Trigger.ExitActions>
                            <BeginStoryboard Storyboard="{StaticResource HoverOff}"/>
                        </Trigger.ExitActions>
                    </Trigger>
                    <Trigger Property="IsSelected" Value="true">
                        <Trigger.EnterActions>
                            <BeginStoryboard Storyboard="{StaticResource SelectedOn}"/>
                        </Trigger.EnterActions>
                        <Trigger.ExitActions>
                            <BeginStoryboard Storyboard="{StaticResource SelectedOff}"/>
                        </Trigger.ExitActions>
                    </Trigger>

                    <Trigger Property="IsEnabled" Value="false">
                        <Setter Property="Foreground" Value="{DynamicResource DisabledForegroundBrush}"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="Foreground" Value="{DynamicResource TextBrush}"/>
</Style>

person Terry    schedule 21.04.2010    source источник


Ответы (2)


Несмотря на то, что я не знал цели сокрытия некоторых ListBoxItems, я мог дать идею использования свойства BorderThickness или BorderBrush ListBoxItem.

<Setter Property="BorderThickness" Value="0" />

Но если вы лучше объясните свой сценарий, я могу предложить кое-что по дизайну.

person Amsakanna    schedule 23.04.2010

Хорошо, думаю, мне удалось это исправить.

Причина, по которой мне нужно было скрыть элементы, заключается в том, что при обновлении они могут быть показаны пользователю, а не заполнять список и снова опрашивать телефонный центр.

Я обнаружил, что это не совсем та граница, которую мне нужно было установить. Серая граница выглядела так, как если бы она была установлена ​​атрибутом границы, но на самом деле это был просто фон, который отображался, потому что было установлено поле.

<ContentPresenter Margin="5,3,3,3" />

Сброс этого поля решил мою проблему.

В любом случае спасибо за усилия.

person Terry    schedule 23.04.2010