2015-07-23 6 views
0

UserControl содержит BorderBrush property from Control. Как настроить его значение по умолчанию, например, Brushes.Black и сделать его доступным для установки разработчиком, который будет использовать мой контроль?Значение по умолчанию для свойства UserControl

Я попытался назначить начальное значение в теге <UserControl> в файле управления xaml и в его конструкторе, но когда я это сделаю, значение, назначенное для элемента управления , будет игнорироваться извне.

+0

Would [ответить CSharper в] (https://stackoverflow.com/a/845033/3993154) в [ Привязать к значению, определенному в настройках] (https://stackoverflow.com/q/845030/3993154)? – Sometowngeek

+0

@Sometowngeek dunno, не могу проверить, изменился ли теперь на aspnet разработчик год назад – FLCL

ответ

3

Вы обычно делаете это путем переопределения метаданных для BorderBrush свойства в вашем UserControl производного класса:

public partial class MyUserControl : UserControl 
{ 
    static MyUserControl() 
    { 
     BorderBrushProperty.OverrideMetadata(
      typeof(MyUserControl), 
      new FrameworkPropertyMetadata(Brushes.Black)); 
    } 

    public MyUserControl() 
    { 
     InitializeComponent(); 
    } 
} 
2

Возможно стили были бы лучше. Вы можете создать новый UserControl, назовем его BorderedControl. Я создал новую папку под названием Controls, чтобы ее удерживать.

<UserControl x:Class="BorderTest.Controls.BorderedControl" 
     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="300" d:DesignWidth="300"> 
<Grid> 

</Grid> 
</UserControl> 

Далее создайте словарь ресурсов, UserControlResources. Обязательно укажите пространство имен элемента управления:

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:ctrls="clr-namespace:BorderTest.Controls"> 
    <Style TargetType="{x:Type ctrls:BorderedControl}"> 
     <Setter Property="BorderBrush" Value="Lime"/> 
     <Setter Property="BorderThickness" Value="3"/> 
    </Style> 
</ResourceDictionary> 

Здесь вы можете указать, какие свойства вы хотели бы иметь по умолчанию.

Затем включить словарь ресурсов в пользовательский элемент управления ресурсами:

<UserControl x:Class="BorderTest.Controls.BorderedControl" 
     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="300" d:DesignWidth="300"> 
<UserControl.Resources> 
    <ResourceDictionary Source="/BorderTest;component/Resources/UserControlResources.xaml"/> 
</UserControl.Resources> 
<Grid> 

</Grid> 
</UserControl> 

Наконец, добавить элемент управления в главном окне:

<Window x:Class="BorderTest.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:ctrls="clr-namespace:BorderTest.Controls" 
    Title="MainWindow" Height="350" Width="525"> 
<Grid> 
    <ctrls:BorderedControl Width="100" 
          Height="100"/> 
</Grid> 
</Window> 

Вот мое решение:

My Solution

Вот приложение, когда вы запускаете его:

Run

Вы можете просто изменить границы вашего пользовательского элемента управления с этим:

<ctrls:BorderedControl Width="100" 
         Height="100" 
         BorderBrush="Orange"/> 
Смежные вопросы