То, что вы просите, является комбинацией нескольких вещей:
Об элементе Background: просто создайте свойство зависимостей (назовем его MyBackgroundDP) типа Brush в коде позади UserControl и привяжите его к вашему XAML, например:
<UserControl ...>
<Grid Background={"Binding MyBackgroundDP, RelativeSource={RelativeSource Mode=FindAncestor, AncestoryType=UserControl}}">
<!-- More XAML declarations -->
</Grid>
</UserControl>
Чтобы создать свойство зависимости, вы можете использовать встроенный фрагмент в Visual Studio: propdp
Просто напишите «propdp» и тот TAB дважды. Заполните поля и все хорошо.
Хорошо, это было достаточно просто, верно? ;)
Теперь самое сложное: создание так называемых мастер-страниц.
На самом деле это не сильно отличается от фона.
Объявите другое свойство зависимости, только на этот раз для объекта типа или FrameworkElement (лучше).
Затем в вашем XAML вы объявляете своего рода заполнитель: ContentControl
. Давайте назовем это MyContentDP для этого примера:
<UserControl ...>
<Grid Background={"Binding MyBackgroundDP, RelativeSource={RelativeSource Mode=FindAncestor, AncestoryType=UserControl}}">
<ContentControl ContentTemplate="{Binding MyContentDP, RelativeSource={RelativeSource Mode=FindAncestor, AncestoryType=UserControl}}" />
</Grid>
</UserControl>
Затем вы можете точно настроить все, что вы хотите предоставить в этом «главном представлении», добавить рамку вокруг сетки, положить несколько цветов, назовите это.
Как только вы закончите, вот как вы его используете, предполагая, что он называется MyUserControl
<Window ...
xmlns:local="...reference_to_your_usercontrol_dll/exe">
<Grid>
<local:MyUserControl MyBackgroundDP="Red">
<local:MyUserControl.MyContentDP>
<!-- More XAML declarations here -->
</local:MyUserControl.MyContentDP>
</local:MyUserControl>
</Grid>
</Window>
Теперь точка производительности:
Если вы поместите весь XAML для этого в качестве пользовательского элемента управления (т. Е. DIFFERENT из UserControl), вы можете затем поместить весь XAML в свой App.xaml
Зачем? потому что анализ XAML может быть интенсивной операцией, и если вы заставите WP7 / SL анализировать его во время выполнения всякий раз, когда вам это нужно, вы теряете производительность.
Вместо этого ваш App.xaml анализируется при запуске, а затем в памяти. Вот что делается при загрузке вашего приложения. Вы получите повышение производительности, хотя оно будет минимальным для элементов управления, сделанных из нескольких XAML, но это все еще хорошая практика.
Надеюсь, это поможет,
Бабы.