У меня общий вопрос о производительности WPF. У нас есть относительно простые формы заявки. Некоторые члены команды считают, что доработка шаблонов для базовых элементов управления повысит производительность и удобство обслуживания. Одним из предпочтительных методов является создание нескольких шаблонов элементов управления для элемента управления и замена их с помощью триггеров. Считается, что меньшее визуальное дерево будет более производительным.
Например, шаблон флажка теперь состоит из двух шаблонов, один отмечен, а другой не проверен:
<ControlTemplate x:Key="CheckedCheckBoxCT" TargetType="{x:Type CheckBox}">
<Grid x:Name="gLayoutRoot" VerticalAlignment="Center" HorizontalAlignment="Left">
<Grid.ColumnDefinitions>
<ColumnDefinition x:Name="colCheck" />
<ColumnDefinition x:Name="colContentLabel" />
</Grid.ColumnDefinitions>
<Rectangle x:Name="rectOuter"
Stroke="{TemplateBinding BorderBrush}"
StrokeThickness="0.5"
Fill="White"
Width="13" Height="13" />
<Rectangle x:Name="rectInner"
Stroke="{TemplateBinding OpacityMask}"
StrokeThickness="0.5"
Width="9" Height="9"
Fill="{TemplateBinding Background}"/>
<Path x:Name="CheckMark"
Data="{DynamicResource CheckSymbol}"
Fill="{TemplateBinding Foreground}"/>
<ContentPresenter x:Name="cpContent" />
</Grid>
</ControlTemplate>
и затем непроверенный (обратите внимание, что элемент пути отсутствует):
<ControlTemplate x:Key="CheckBoxCT" TargetType="{x:Type CheckBox}">
<Grid x:Name="gLayoutRoot"
VerticalAlignment="Center"
HorizontalAlignment="Left">
<Grid.ColumnDefinitions>
<ColumnDefinition x:Name="colCheck" />
<ColumnDefinition x:Name="colContentLabel" />
</Grid.ColumnDefinitions>
<Rectangle x:Name="rectOuter"
Stroke="{TemplateBinding BorderBrush}"
StrokeThickness="0.5"
Fill="White"
Width="13" Height="13" />
<Rectangle x:Name="rectInner"
Stroke="{TemplateBinding OpacityMask}"
StrokeThickness="0.5"
Fill="{TemplateBinding Background}"
Width="9" Height="9" />
<ContentPresenter x:Name="cpContent"
Margin="5,0,0,0"
VerticalAlignment="Center"
Grid.Column="1" />
</Grid>
</ControlTemplate>
Существует аналогичное обсуждение создания текстового поля только для чтения с выбираемым текстом, с использованием триггеров для замены текстового блока (из которого нельзя выбрать текст) с текстовым полем.
Действительно ли это улучшает производительность в какой-либо заметной степени? С флажком, будет ли триггер, чтобы показать / скрыть проверку вместо двух разных шаблонов управления, примерно одинаковым или лучше?
Мне действительно все равно, но кажется, что добавлена большая сложность для небольшого выигрыша. Мне было любопытно, что думают другие, особенно если основано на объективном опыте. (Вы можете заметить, что мне все равно, настроить некоторые приложения и протестировать их производительность. :))
Спасибо!