извините, если этот вопрос слишком прост, но мне сложно понять, как создавать фоны для элементов управления - в надежде, что это улучшит производительность приложения.Skinning Control Backgrounds - лучшая производительность?
У меня есть 9 различных элементов управления. Все они имеют фон. Фоны состоят из изображений, других элементов управления или того и другого. Все эти фоны имеют другой фон.
Думайте об этом как о Power Point со слайдами, слайдами и слайдами, унаследованными в этом порядке. У меня 9 слайдов/элементов управления.
- Первые 3 управления имеют один и тот же «раскладку управления» (назовем его ControlLayout1). ControlLayout1 получает некоторые из его элементов из ControlMaster1.
- Вторые 3 элемента управления также имеют одинаковый макет управления, но это отличается от первого. Назовем это ControlLayout2. Он также унаследовал от ControlMaster1.
- Окончательный набор из 3 элементов управления снова разный. Мы можем позвонить им ControlLayout3. Но на этот раз они унаследовали от другого мастера - ControlMaster2.
Прямо сейчас в каждом элементе управления я записываю все XAML каждый раз отдельно. Я думаю, что должен быть способ не писать их в каждом из этих элементов. В идеале, я бы хотел создать один набор XAML, который можно использовать повторно.
Вот некоторые псевдо-XAML:
<UserControl x:Name="Control1">
<MyBackground (ControlLayout1)/>
</UserControl>
<UserControl x:Name="Control2">
<MyBackground (ControlLayout2)/>
</UserControl>
<UserControl x:Name="Control3">
<MyBackground (ControlLayout3)/>
</UserControl>
А потом где-то ControlLayouts (я не знаю, как Application.Resources или в другом месте)
<Canvas x:Name="ControlLayout1">
<MyMasterBackground (ControlMaster1)/>
</Canvas>
<Canvas x:Name="ControlLayout2">
<MyMasterBackground (ControlMaster1)/>
<TextBox Text="The Control 2">
</Canvas>
<Canvas x:Name="ControlLayout3">
<MyMasterBackground (ControlMaster2)/>
<TextBox Text="The Control 3">
</Canvas>
А потом для ControlMasters
<Canvas x:Name="ControlMaster1">
<Canvas.Background>
<ImageBrush ImageSource="/Images/image1.jpg" />
</Canvas.Background>
</Canvas>
<Canvas x:Name="ControlMaster2">
<Canvas.Background>
<ImageBrush ImageSource="/Images/image2.jpg" />
</Canvas.Background>
<TextBox Text="Control Master 1">
</Canvas>
После определения ControlLayouts и ControlMasters никогда не нужно менять - они являются статическими.
За исключением того, что у меня меньше XAP, если я могу разместить их в одном месте и повторно использовать XAML, я надеюсь, что производительность будет улучшена в моем приложении, поскольку ControlLayouts автоматически получит BitmapCached или что-то в этом роде.
Итак, во-первых, есть ли хорошая стратегия для реализации вышеизложенного (у ControlLayouts и Masters нет никакого кода)? Во-вторых, производительность будет улучшена при загрузке Control1, Control2 и т. Д.? Наконец, если бы они были чистым пользовательским контролем (т. Е. У них был некоторый код), было бы лучше для производительности?
Заранее благодарен!
Если вы хотите, чтобы статические вещи были BitmapCached, вы должны просто установить его вручную. Некоторые вещи [авто-кешированные] (http://msdn.microsoft.com/en-us/library/ff602285 (v = vs.95) .aspx), но по моему опыту настройка вручную может привести к большой разнице, особенно когда вы перемещаете элементы пользовательского интерфейса вокруг много и видите резкую производительность. –