C# 从代码C编辑样式WPF#

C# 从代码C编辑样式WPF#,c#,wpf,resources,grid,styles,C#,Wpf,Resources,Grid,Styles,我有这种情况: 我有一个窗户里的框架。 我有一个页面将从代码加载到一个框架中。 我在页面中有一个网格,其中包含代码中的行和列定义 我想用按钮(从矩形创建)来弹出网格行和列。 我编写了以下代码: 应用于每个按钮的样式: <Style TargetType="{x:Type Button}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType

我有这种情况:

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

我想用按钮(从矩形创建)来弹出网格行和列。 我编写了以下代码:

应用于每个按钮的样式:

<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>
我希望您可以为代码后面的每个按钮在矩形中设置不同的图像()。 我怎样才能为这种需要编写代码


请好好解释我,因为我是WPF的负责人

样式是一个单独的实例,如果您更改
样式
图像它将在使用
样式
的任何地方更改

在不创建自定义控件的情况下,我能想到的最简单的解决方案是使用
按钮
标记
属性传入图像文件名,
标记
是一个
依赖属性
,因此它支持
数据绑定

例如:

 <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)
{
按钮btn=新按钮();
btn.余量=新厚度(4,4,4,4);
加总儿童数(btn);
btn.SetValue(Grid.RowProperty,j);
btn.SetValue(Grid.ColumnProperty,i);
btn.Tag=“此按钮图像的文件名”;
}

样式是一个单独的实例,如果更改
样式
图像
它将在使用
样式
的任何地方更改

在不创建自定义控件的情况下,我能想到的最简单的解决方案是使用
按钮
标记
属性传入图像文件名,
标记
是一个
依赖属性
,因此它支持
数据绑定

例如:

 <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)
{
按钮btn=新按钮();
btn.余量=新厚度(4,4,4,4);
加总儿童数(btn);
btn.SetValue(Grid.RowProperty,j);
btn.SetValue(Grid.ColumnProperty,i);
btn.Tag=“此按钮图像的文件名”;
}

costruct是一个类名!你需要按钮上的文字还是一张图片?只需要图片,也可能需要文字,但主要是图片!你能给出一个解决方案吗?样式是一个单独的实例,如果你更改样式图像,它将在使用样式的任何地方更改,我认为你需要创建一个Usercontrol,或者创建一个IValueConverter,并使用Buttons标记属性来存储图像文件名。costruct是一个类名!你需要按钮上的文字还是一张图片?只需要图片,也可能需要文字,但主要是图片!你能给出一个解决方案吗?样式是一个实例,如果你更改样式图像,它将在使用样式的任何地方更改,我认为你需要创建一个Usercontrol,或者创建一个IValueConverter,并使用Buttons标记属性来存储图像文件名。非常感谢!这是一个如何帮助程序员的例子!您的解决方案非常有效!=)非常感谢你!这是一个如何帮助程序员的例子!您的解决方案非常有效!=)向上的
 <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";
}