Связующие вопросы WPF - PullRequest
       18

Связующие вопросы WPF

0 голосов
/ 06 января 2010

Я пытаюсь настроить элемент управления TreeView. Когда пользователь выбирает элемент в TreeView, мне нужно, чтобы ActualWidth из SelectedItem был сохранен в теге элемента:

 <Style x:Key="{x:Type TreeViewItem}" TargetType="{x:Type TreeViewItem}">
           <!-- ... -->
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type TreeViewItem}">
                        <Grid ShowGridLines="True">

                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="Auto" />
                                <ColumnDefinition />
                            </Grid.ColumnDefinitions>
                            <Grid.RowDefinitions>
                                <RowDefinition />
                                <RowDefinition />
                            </Grid.RowDefinitions>

                            <Rectangle x:Name="rect" />

                            <ContentPresenter x:Name="PART_Header" ContentSource="Header" Margin="5" />         

                            <ItemsPresenter x:Name="ItemsHost" Grid.Row="1" Grid.Column="1" />
                            <!-- ... -->       
                        </Grid>

                        <ControlTemplate.Triggers>
                            <Trigger Property="IsSelected" Value="true">
                                <Setter Property="Tag" Value="{Binding ElementName=rect, Path=ActualWidth}" />
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

Позже я слушаю SelectedItemChanged событие TreeView:

private void views_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
    {
        TreeViewItem item = (TreeViewItem)e.NewValue;
        double i = (double)item.Tag;
    }

Теперь проблема в том, что item.Tag всегда нулевой. Это проблема с моей привязкой? Или все должно быть иначе?

1 Ответ

1 голос
/ 06 января 2010

Попробуйте это:

<Setter Property="Tag" Value="{Binding Path=ActualWidth, RelativeSource={x:Static RelativeSource.Self}}" />
...