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";
}