Ответ 1
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>