2010-06-14 2 views
0

Я сузил то, что хочу, чтобы моя кнопка wpf выглядела как XAML.WPF: захват XAML в подклассовый элемент управления

Теперь я хотел бы создать вложенную классифицироваться кнопки управления, я могу просто повторное использование ж/из того, чтобы написать все, что Markup

<Button Click="TestGridColumnButton_Click" Background="Transparent" Width="16" Height="16" Margin="0,0,0,0" Padding="0,0,0,0" BorderBrush="{x:Null}"> 
    <Button.Template> 
     <ControlTemplate> 
      <Image HorizontalAlignment="Center" VerticalAlignment="Center" Style="{StaticResource SourceStyle}" /> 
     </ControlTemplate> 
    </Button.Template> 
</Button> 

как я могу установить все эти свойства с помощью C#?

+0

Хммм ... я полагаю, я мог бы создать пользовательский элемент управления WPF, с помощью этой кнопки, и повторно использовать это .. это будет preferrable? –

ответ

0

Есть несколько способов сделать это:

[Примечание:. Ради этого ответа, я предполагаю, что вы создаете кнопки в простом окне]

1) А, не-многоразовые и грязным способом было бы присвоить все свойства в загруженном событии окна. Назвав объект кнопки, вы можете получить ссылку на него и присвоить значения свойствам, зарегистрировать событие и назначить шаблон. Я предполагаю, что у вас возникли проблемы с свойствами шаблона. Чтобы создать шаблон в коде, вы можете использовать FrameworkElementFactory class (который устарел) или использовать метод XamlReader.Load (что является предпочтительным подходом).

2) Создайте настраиваемый элемент управления, для которого пользовательский шаблон создается в файле generic.xaml. Вы можете указать элементы в пользовательском шаблоне и получить ссылки на них, переопределив метод OnApplyTemplate. Затем вы можете создавать общедоступные свойства, которые непосредственно сопоставляются с элементом Image в шаблоне или выставляют элемент Image как общедоступное свойство в элементе управления. Используя этот подход, вы можете установить свойства в коде C#, используя открытые свойства.

3) Вы также можете определить несколько стилей и переключиться между ними в коде C#. Этот метод работает так же, как в HTML, когда мы переключаем классы с использованием JavaScript.

Надеюсь, это поможет!

+0

Вот ссылка на метод Xaml.Load: http://msdn.microsoft.com/en-us/library/ms590388.aspx – decyclone

+0

круто спасибо .. yah Я помню, что стиль можно было создать с помощью шаблона сторона этого .. я просто так не делал :) –

3

Создайте стиль для своей кнопки и добавьте в глобальный ресурсный словарь.

<Application x:Class="TestApp.App" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    StartupUri="Window1.xaml"> 
    <Application.Resources> 
     <ResourceDictionary> 
      <Style x:Key="MyIconButtonStyle" TargetType="{x:Type Button}"> 
      <Setter Property="Background" Value="Transparent" /> 
       <Setter Property="Width" Value="16" /> 
       <Setter Property="Height" Value="16" /> 
       <Setter Property="Margin" Value="0,0,0,0" /> 
       <Setter Property="Padding" Value="0,0,0,0" /> 
       <Setter Property="BorderBrush" Value="{x:Null}" /> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="{x:Type Button}"> 
          <Image HorizontalAlignment="Center" VerticalAlignment="Center" Source="buttonImage.jpg"/> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </ResourceDictionary> 
    </Application.Resources> 
</Application> 

Используйте стиль, как это:

<Button Style="{StaticResource MyIconButtonStyle}" Click="Button_Click"/> 
Смежные вопросы