ResourceDictionary - просто контейнер для ваших стилей / шаблонов и т. Д. Таким образом, у вас действительно есть выбор между использованием стиля (и ссылкой на него через ResourceDictionary) или UserControl.
Для того, чтобы различать двазадайте себе вопрос: реализуете ли вы еще один внешний вид для какого-либо существующего элемента управления, или вы реализуете что-то действительно новое, которое представляет собой нечто большее, чем просто ListView (или Border, или ComboBox и т. д.)?В первом случае используйте стиль;в последнем случае создайте новый UserControl.
Специально для вашего случая я бы выбрал UserControl.
Пример кода (хотя и не полный)
(Обратите внимание, что шаблон для следующего кода можно вставить с помощью VS «добавить новый UserControl»)
Xaml:
<UserControl x:Class="SomeNamespace.SidebarMenu"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<UserControl.Resources> <!-- you can define local styles here -->
<Style x:Key="SidebarMenuTextblock" TargetType=TextBlock>
...
</Style>
</UserControl.Resources>
<Border Background=...>
<StackPanel>
<TextBlock
x:Name="Put_a_name_if_you_want_to_reference_this_item_in_code_behind"
Style="{StaticResource SidebarMenuTextblock}"
Text="{x:Static res:Resources.WinApp_SideBarMenu_Title}" />
... </StackPanel>
</Border>
</UserControl>
.cs:
using System;
using System.Windows;
using System.Windows.Controls;
namespace SomeNamespace
{
public partial class SidebarMenu : UserControl
{
public NumericUpDown()
{
InitializeComponent();
}
...
// define here your properties etc,
}
}
Теперь вы можете использовать элемент управления следующим образом:
<Window
x:Class="SomeOtherNamespace.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="clr-namespace:SomeNamespace">
<Grid>
<controls:SidebarMenu PropertyIfYouDefinedOne="SomeValue"/>
...
</Grid>
</Window>