我对你的场景有点好奇,但这里是我能想到的最快捷的简单解决方案。所有的代码在评论中都有解释,但如果您有任何疑问,请告诉我。当然,如何做到这一点还有更多的解决方案,但我没有很多关于你想要做什么的细节。所以我希望这对你有用。你应该能够将所有这些粘贴到一个新项目中并让它工作。
XAML:
<Window x:Class="StackOverflowTests.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
Title="Window1"
x:Name="window1"
Width="800"
Height="600"
Loaded="Window1_Loaded">
<Window.Resources>
<!--
Create a style so you don't have to define the properties 30 times.
The style will tell the ToggleButtons which properties in your class they should look at.
The ToggleButtonClass object will be bound on the code side
-->
<Style TargetType="{x:Type ToggleButton}" x:Key="toggleButtonStyle">
<Setter Property="Height" Value="{Binding ToggleButtonHeight}" />
<Setter Property="Width" Value="{Binding ToggleButtonWidth}" />
<Setter Property="Content" Value="{Binding ToggleButtonText}" />
</Style>
</Window.Resources>
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
<StackPanel x:Name="theStackPanel">
<!--
You still have to set the style in each button, in case you add buttons that you don't want to use the properties
If you don't want to manually set the style, remove the x:Key="toggleButtonStyle" property from the style above
and also remove the Style="{StaticResource toggleButtonStyle}" from all the toggle buttons below.
-->
<ToggleButton Style="{StaticResource toggleButtonStyle}" />
<ToggleButton Style="{StaticResource toggleButtonStyle}" />
<ToggleButton Style="{StaticResource toggleButtonStyle}" />
<ToggleButton Style="{StaticResource toggleButtonStyle}" />
<ToggleButton Style="{StaticResource toggleButtonStyle}" />
<ToggleButton Style="{StaticResource toggleButtonStyle}" />
<ToggleButton Style="{StaticResource toggleButtonStyle}" />
<ToggleButton Style="{StaticResource toggleButtonStyle}" />
<ToggleButton Style="{StaticResource toggleButtonStyle}" />
<ToggleButton Style="{StaticResource toggleButtonStyle}" />
<ToggleButton Style="{StaticResource toggleButtonStyle}" />
<ToggleButton Style="{StaticResource toggleButtonStyle}" />
<ToggleButton Style="{StaticResource toggleButtonStyle}" />
<ToggleButton Style="{StaticResource toggleButtonStyle}" />
<ToggleButton Style="{StaticResource toggleButtonStyle}" />
<ToggleButton Style="{StaticResource toggleButtonStyle}" />
<ToggleButton Style="{StaticResource toggleButtonStyle}" />
<ToggleButton Style="{StaticResource toggleButtonStyle}" />
<ToggleButton Style="{StaticResource toggleButtonStyle}" />
<ToggleButton Style="{StaticResource toggleButtonStyle}" />
<ToggleButton Style="{StaticResource toggleButtonStyle}" />
<ToggleButton Style="{StaticResource toggleButtonStyle}" />
<ToggleButton Style="{StaticResource toggleButtonStyle}" />
<ToggleButton Style="{StaticResource toggleButtonStyle}" />
<ToggleButton Style="{StaticResource toggleButtonStyle}" />
<ToggleButton Style="{StaticResource toggleButtonStyle}" />
<ToggleButton Style="{StaticResource toggleButtonStyle}" />
<ToggleButton Style="{StaticResource toggleButtonStyle}" />
<ToggleButton Style="{StaticResource toggleButtonStyle}" />
<ToggleButton Style="{StaticResource toggleButtonStyle}" />
</StackPanel>
</ScrollViewer>
</Window>
C#:
using System.Windows;
using System.Windows.Controls.Primitives;
namespace StackOverflowTests
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
// Creating all the classes and setting the DataContext of each ToggleButton
private void Window1_Loaded(object sender, RoutedEventArgs e)
{
int sizeFactor = 0;
// for each ToggleButton in the StackPanel, create one instance of the ToggleButtonClass
// and assign it to the DataContext of the ToggleButton, so all the binding in the Style
// created in XAML can kick in.
foreach (UIElement element in theStackPanel.Children)
{
if (element is ToggleButton)
{
sizeFactor++;
ToggleButtonClass toggleButtonClass = new ToggleButtonClass()
{
ToggleButtonHeight = sizeFactor * 20,
ToggleButtonWidth = sizeFactor * 50,
ToggleButtonText = "Button " + sizeFactor
};
(element as ToggleButton).DataContext = toggleButtonClass;
}
}
}
}
// your toggle button class
public class ToggleButtonClass
{
public double ToggleButtonHeight { get; set; }
public double ToggleButtonWidth { get; set; }
public string ToggleButtonText { get; set; }
}
}