Как изменить границу элемента списка при использовании предопределенного шаблона - PullRequest
0 голосов
/ 21 апреля 2010

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

Теперь я заполняю список элементами (usercontrols), но не все из них должны быть видны постоянно. Но когда я устанавливаю высоту на 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>

Ответы [ 2 ]

0 голосов
/ 23 апреля 2010

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

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

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

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

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

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

0 голосов
/ 23 апреля 2010

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

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

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

...