WPF:将XAML捕获到子类控件中

时间:2010-06-14 18:50:25

标签: wpf xaml

我缩小了我希望我的wpf按钮看起来像使用XAML。

现在我想创建一个子类按钮控件,我可以重新使用w / out必须写出所有标记

<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#设置所有这些属性?

2 个答案:

答案 0 :(得分: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"/>

答案 1 :(得分:0)

有多种方法可以做到:

[注意:为了这个答案,我假设你在一个简单的窗口中创建一个按钮。]

1)不可重复使用的脏方法是在窗口加载的事件中分配所有属性。通过命名按钮对象,您可以获得对它的引用并为属性赋值,注册事件并分配模板。我假设您遇到模板属性问题。要在代码中创建模板,您可以使用FrameworkElementFactory class(不推荐使用)或使用XamlReader.Load方法。(这是首选方法)。

2)创建一个自定义控件,在generic.xaml文件中为其创建自定义模板。您可以在自定义模板中命名元素,并通过重写OnApplyTemplate方法来检索对它们的引用。然后,您可以创建直接映射到模板中的Image元素的公共属性,或者将Image元素公开为控件中的公共属性。使用此方法,您可以使用公开的属性在C#代码中设置属性。

3)您还可以定义多个样式并在c#代码之间切换。当我们使用JavaScript切换类时,此方法就像在HTML中一样。

希望这有帮助!