繁体   English   中英

从代码C#编辑样式WPF

[英]Edit style WPF from code C#

我有这种情况:

我在窗户上有一个铁架。 我有一个页面,将从代码中加载一个页面。 我在页面中有一个网格,其中有代码定义的行和列。

我想用按钮(从矩形创建)填充网格的行和列。 我写了这段代码:

样式适用于每个按钮:

<Style TargetType="{x:Type Button}">
<Setter Property="Template">
    <Setter.Value>
        <ControlTemplate TargetType="{x:Type Button}">
            <Grid>
                <Rectangle x:Name="rect" Style="{DynamicResource rectangle_style}" Cursor="Hand">
                    <Rectangle.Fill>
                        <ImageBrush ImageSource="Attempts\image.jpg" Stretch="UniformToFill"/>
                    </Rectangle.Fill>
                </Rectangle>
                <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Content=""/>
            </Grid>
            <ControlTemplate.Triggers>
                <Trigger Property="IsFocused" Value="True"/>
                <Trigger Property="IsDefaulted" Value="True"/>
                <Trigger Property="IsMouseOver" Value="True"/>
                <Trigger Property="IsPressed" Value="True"/>
                <Trigger Property="IsEnabled" Value="False"/>
            </ControlTemplate.Triggers>
        </ControlTemplate>
    </Setter.Value>
</Setter>

POPOLATE CLASS CODE:

 public void popolate(Grid grd)
    {

        for(int j = 1; j < 4; ++j)
        {


            for (int i = 1; i < 6;  ++i)
            {
                Button btn = new Button();
                btn.Margin= new Thickness(4,4,4,4);
                grd.Children.Add(btn);
                btn.SetValue(Grid.RowProperty, j);
                btn.SetValue(Grid.ColumnProperty, i);


            }



        }

主要致电类别:

公共局部类MainWindow:Window {

    Page1 page = new Page1();
    Costruct costruttore = new Costruct();


    public MainWindow()
    {
        this.InitializeComponent();
                    costruttore.popolate(page.LayoutRoot);
                    frame_first.NavigationService.Navigate(page);

        // Insert code required on object creation below this point.
    }

}

我想可以在代码后面的每个按钮的矩形中设置不同的图像()。 我如何才能为此编写代码?

请好好解释一下,因为我是WPF的主要负责人!

Style是单个实例,如果您更改Style Image ,它将在使用Style所有地方进行更改。

没有创建自定义控件,我能想到的最简单的解决方案是使用Buttons Tag属性来传递图像文件名, TagDependancyProperty因此它支持DataBinding

例:

 <Style TargetType="{x:Type Button}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Grid>
                    <Rectangle x:Name="rect" DataContext="{TemplateBinding Tag}" Style="{DynamicResource rectangle_style}" Cursor="Hand">
                        <Rectangle.Fill>
                            <ImageBrush ImageSource="{Binding}" Stretch="UniformToFill"/>
                        </Rectangle.Fill>
                    </Rectangle>
                    <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Content=""/>
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsFocused" Value="True"/>
                    <Trigger Property="IsDefaulted" Value="True"/>
                    <Trigger Property="IsMouseOver" Value="True"/>
                    <Trigger Property="IsPressed" Value="True"/>
                    <Trigger Property="IsEnabled" Value="False"/>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

码:

for (int i = 1; i < 6;  ++i)
{
    Button btn = new Button();
    btn.Margin= new Thickness(4,4,4,4);
    grd.Children.Add(btn);
    btn.SetValue(Grid.RowProperty, j);
    btn.SetValue(Grid.ColumnProperty, i);
    btn.Tag = "The filename for this buttons image";
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM