Как управлять свойствами по умолчанию для настраиваемого элемента управления в VS2010 WPF designer - PullRequest
2 голосов
/ 26 ноября 2010

У меня есть класс, который наследуется от Button. В XAML для класса я указал Width, Height и Content, в надежде, что когда я использую конструктор WPF VS2010, чтобы вставить свой элемент управления, например окно, это будут значения по умолчанию для этих свойств. Однако дизайнер использует значения по умолчанию из кнопки.

Мой контроль XAML:

<Button x:Class="Something.FunctionButton4"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         d:DesignHeight="64" d:DesignWidth="64"
    Height="64" Width="64" Content="FunctionButton"
    OverridesDefaultStyle="True"
    Focusable="False">
  <Button.Template>
    <ControlTemplate TargetType="Button">
      ...
    </ControlTemplate>
  </Button.Template>
</Button>

XAML, сгенерированный дизайнером:

<my:FunctionButton4 Content="Button" Height="23" x:Name="functionButton43" Width="75" />

Что мне нужно сделать, чтобы контролировать значения по умолчанию в конструкторе?

Ответы [ 3 ]

1 голос
/ 31 августа 2013

Вот для чего DependencyProperty.OverrideMetadata .

В статическом конструкторе вы вызываете OverrideMetadata, передавая FrameworkPropertyMetadata с новым значением по умолчанию.Например, это устанавливает ширину по умолчанию для кнопки равной 60

public class NewButton : Button
{
   static NewButton()
   {
        WidthProperty.OverrideMetadata(typeof(NewButton), new FrameworkPropertyMetadata((double)60));
   }
}
0 голосов
/ 26 апреля 2011

Я не использовал его раньше, но я считаю, что это то, для чего DependencyProperty.OverrideMetadata .

В вашем классе вы бы добавили статический конструктор, и в этом статическомконструктор, вы бы вызвали OverrideMetadata, передав PropertyMetadata с новым значением по умолчанию.Например: (теоретический, непроверенный)

static FunctionButton4() {
    WidthProperty.OverrideMetadata(
        typeof(FunctionButton4), new PropertyMetadata(64));
    HeightProperty.OverrideMetadata(
        typeof(FunctionButton4), new PropertyMetadata(64));
}
0 голосов
/ 26 ноября 2010

Удалить Height="64" Width="64".DesignHeight и DesignWidth будет достаточно.

Редактировать: В конструкторе элементов управления.Инициализируйте нужные значения по умолчанию, проверив, находится ли элемент управления в режиме разработки, как.

public FunctionButton4()
{
   if(DesignerProperties.GetIsInDesignMode)
   {
       this.MinHeight = 30d; /// Min Height or Height whichever is your concern
       this.MinWidth = 75d;
   }
}
...