Infragistics XamDatagrid - предотвращает создание экземпляра элемента управления, когда он не виден - PullRequest
0 голосов
/ 02 ноября 2011

У нас есть Infragistics XamDatagrid со столбцом, содержащим изображение.

Это изображение может быть видимым или нет в зависимости от свойства ViewModel.Когда это видно, если вы наводите курсор мыши, отображается всплывающее окно.Пожалуйста, смотрите ниже XAML для этого столбца.

    <Setter Property="IsEnabled" Value="true" />
    <Setter Property="Focusable" Value="false" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type DataPresenter:CellValuePresenter}">
                <Border Background="{StaticResource FrozenColumnBrush}">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition></ColumnDefinition>
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition></RowDefinition>
                            <RowDefinition></RowDefinition>
                        </Grid.RowDefinitions>

                        <Image x:Name="BarrierImage"
                               Grid.Row="0"
                     Height="16" Width="16"
                     HorizontalAlignment="Center" VerticalAlignment="Center"
                     Source="../Images/lock_16.ico"
                     Visibility="{Binding DataItem.IsBarrierEvent, Converter={StaticResource BooleanToVisibilityConverter}}" >
                        </Image>
                        <Grid Grid.Row="1" Visibility="{Binding DataItem.IsBarrierEvent, Converter={StaticResource BooleanToVisibilityConverter}}" >
                        <Popup
                               Name="BarrierPopup"
                               AllowsTransparency="True"
                               PopupAnimation="Fade"
                               HorizontalOffset="-35"
                               VerticalOffset="0"
                               Behaviors:OpenPopupWhenTooltipOpening.Control="{Binding ElementName=BarrierImage}"
                               >
                            <Views:BarrierView DataContext="{Binding DataItem.Barriers}"/>
                        </Popup>
                        </Grid>
                    </Grid>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>

Проблема в том, что мы получаем 200 строк, но только одна имеет IsBarrierEvent = true, поэтому есть только одно изображение и только одно всплывающее окно будет отображаться при наведении курсора.Но оказывается, что WPF создает элемент управления BarrierView для каждой строки.Мы заметили, что при использовании dotTrace для исследования проблем с производительностью.

Есть ли способ предотвратить создание невидимых элементов управления?Мы также пытались связать свойство viewmodel с видимостью главной границы, но они все еще создаются.

Спасибо.

PS - я попытался вставить теги XAML дляСтиль, но он не отображался должным образом

1 Ответ

1 голос
/ 02 ноября 2011

Я бы порекомендовал вам создать свой собственный элемент управления и переместить изображение, всплывающее окно и т. Д. В шаблон этого элемента управления.Если у вас есть элементы, определенные в шаблоне, и этот шаблон применяется, все элементы в этом шаблоне будут созданы, поэтому в этом случае, когда применяется шаблон CVP, это означает, что Image, Popup, BarrierView и т. Д. Будут созданы дажеесли элемент-предок в шаблоне свернут.Однако если в шаблоне есть элемент управления, видимость которого свернута, шаблон этого элемента управления не будет применяться до тех пор, пока он не будет измерен впервые, что не произойдет до тех пор, пока видимость не станет скрытой или видимой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...