Что касается вашего раздражения от размера кнопок, то это то, что, похоже, предназначено для дизайнера в рабочем процессе дизайнера / разработчика, пока вы явно работаете над частью для разработчиков. В целях развития я всегда применяю несколько стилей в своем App.xaml, чтобы обеспечить несколько лучший размер кнопок. Например, в теге приложения в файле app.xaml:
<Application.Resources>
<Style TargetType="Button">
<Setter Property="MinWidth" Value="60" />
<Setter Property="MinHeight" Value="23" />
<Setter Property="Margin" Value="3" />
</Style>
</Application.Resources>
Относительно вашего актуального вопроса:
Проблема в том, что ваша панель DockPanel растягивается по ширине текста, и кнопка естественным образом расширяется, чтобы заполнить доступную область. Если вы хотите быстрое и грязное решение, вы можете сделать что-то вроде:
<DockPanel HorizontalAlignment="Left">
<Button x:Name="ButtonFavorite"
DockPanel.Dock="Top"
Content="Customers"
Margin="10"
Width="Auto"
MaxWidth="100"
Click="ButtonFavorite_Click">
</Button>
</DockPanel>
Обратите внимание на MaxWidth. Если вы хотите более комбинируемый результат, изолируйте вашу кнопку на другой панели. (Я использую стековую панель, потому что я считаю, что кто-то уже использовал сетку в своем примере):
<DockPanel HorizontalAlignment="Left">
<StackPanel DockPanel.Dock="Top" Orientation="Horizontal">
<Button x:Name="ButtonFavorite"
Content="Customers"
Margin="10"
Width="Auto"
Click="ButtonFavorite_Click" />
</StackPanel>
<TextBlock DockPanel.Dock="Top" Text="this is a long text which makes the button stretch across the window, if this text is just a couple words, the button will be smaller, and this drives me up the wall" Margin="10" TextWrapping="Wrap" />
</DockPanel>
Мне нравится StackPanel в этом случае, потому что я использую его для создания горизонтальной «панели» кнопок вдоль нижней части окна формы в правом углу.