Как установить значение IsChecked по умолчанию для Silverlight ToggleButton

У меня есть кнопка Toggle, определенная в стиле для Silverlight TreeviewItem, и я хочу, чтобы она начиналась в состоянии IsChecked=true. Я попытался просто установить IsChecked=True, но это не дало никакого эффекта.

Спасибо

Пример XAML:

<Style x:Name="CheckedToggleButton"
       TargetType="ToggleButton">
    <Setter Property="IsChecked"
            Value="True" />
    <Setter Property="Margin"
            Value="0" />
</Style>

<Style x:Key="TreeViewItemStyle"
       TargetType="controls:TreeViewItem">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="controls:TreeViewItem">
                <Grid Margin="2">
                    <Grid.RowDefinitions>
                        <!--ContentPresenter Row-->
                        <RowDefinition Height="Auto" />
                        <!--ExpanderButton Row-->
                        <RowDefinition Height="Auto" />
                        <!--ItemsPresenter Row-->
                        <RowDefinition Height="*" />
                    </Grid.RowDefinitions>
                    <ContentPresenter Cursor="{TemplateBinding Cursor}"
                                      HorizontalAlignment="Stretch"
                                      Margin="{TemplateBinding Padding}"
                                      x:Name="content"
                                      Content="{TemplateBinding Header}"
                                      ContentTemplate="{TemplateBinding HeaderTemplate}"
                                      Grid.RowSpan="1"/>
                    <ToggleButton x:Name="ExpanderButton"
                                  Style="{StaticResource CheckedToggleButton}"
                                  IsChecked="True"
                                  HorizontalAlignment="Center"
                                  VerticalAlignment="Bottom"
                                  Width="15"
                                  Height="15"
                                  Grid.Row="1" />
                    <ItemsPresenter x:Name="ItemsHost"
                                    Visibility="{Binding ElementName=ExpanderButton, Path=IsChecked, Converter={StaticResource boolviz}}"
                                    Grid.Row="2"
                                    HorizontalAlignment="Stretch" />
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

person breed052    schedule 30.03.2011    source источник


Ответы (2)


Я очень ожидаю, что код в классе TreeviewItem будет специально назначать IsChecked в зависимости от состояния собственного свойства IsExpanded.

Попробуйте добавить еще один сеттер в свой стиль: -

 <Setter Property="IsExpanded" Value="True" />

Это должно перевести TreeViewItem в расширенное состояние по умолчанию и, вероятно, приведет к тому, что TreeviewItem одновременно установит для ExpanderButton IsChecked значение true.

person AnthonyWJones    schedule 30.03.2011

Вы также можете попробовать установить его в (n неявном) стиле, но у меня есть подозрение, что может случиться так, что что-то (TreeView?) сбрасывает его во время выполнения, иначе не должно случиться, что ваша настройка не имеет никакого эффекта.

person dain    schedule 30.03.2011
comment
Пробовал устанавливать в стиле, но все равно не проверялось. - person breed052; 30.03.2011
comment
Странно, можете опубликовать XAML? - person dain; 30.03.2011
comment
добавлен xaml к исходному вопросу. - person breed052; 30.03.2011