Мне нужно использовать ItemsControl
в проекте. Я хочу, чтобы не только все элементы в ItemsControl
могли автоматически масштабироваться, но и все элементы в ItemsControl
имеют одинаковый размер.
Поэтому я решил использовать , чтобы сделать это.
Вот XAML:
<Viewbox Grid.Column="1" VerticalAlignment="Center" StretchDirection="UpOnly">
<ItemsControl Name="FunctionButton" Grid.Column="1" VerticalAlignment="Center">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button>
<Button.Template>
<ControlTemplate TargetType="Button">
<Grid Background="#00008000" Cursor="Hand" Margin="0,5" VerticalAlignment="Center">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.25*"/>
<ColumnDefinition Width="0.15*"/>
<ColumnDefinition Width="0.60*"/>
</Grid.ColumnDefinitions>
<Ellipse Height="{Binding Path=ActualWidth,RelativeSource={RelativeSource Self}}"
Fill="#44474c" Name="E"/>
<TextBlock Text="{Binding ButtonName}"
Grid.Column="2"
VerticalAlignment="Center"
Foreground="#575757"
FontSize="13"
Margin="0,10"/>
</Grid>
<ControlTemplate.Triggers>
<EventTrigger RoutedEvent="Mouse.MouseEnter">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation
Storyboard.TargetProperty="(Ellipse.Fill).(SolidColorBrush.Color)"
Storyboard.TargetName="E"
To="#a4cbd0"
Duration="00:00:01"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
<EventTrigger RoutedEvent="Mouse.MouseLeave">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation
Storyboard.TargetProperty="(Ellipse.Fill).(SolidColorBrush.Color)"
Storyboard.TargetName="E"
To="#44474c"
Duration="00:00:01"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Button.Template>
</Button>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Viewbox>
А вот код позади:
public MainPage()
{
InitializeComponent();
FunctionButton.ItemsSource = FunctionButtonList;
FunctionButtonClass FBC = new FunctionButtonClass();
FBC.ButtonName = "123";
FunctionButtonList.Add(FBC);
FBC = new FunctionButtonClass();
FBC.ButtonName = "4546465";
FunctionButtonList.Add(FBC);
FBC = new FunctionButtonClass();
FBC.ButtonName = "34534534534";
FunctionButtonList.Add(FBC);
}public class FunctionButtonClass : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChange(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
string _ButtonName;
public string ButtonName
{
get
{
return _ButtonName;
}
set
{
_ButtonName = value;
NotifyPropertyChange("ButtonName");
}
}
}List<FunctionButtonClass> FunctionButtonList = new List<FunctionButtonClass>();
Что ж, после того, как программа запустилась, это оказалось так: и эллипс первого и второго кажется не одинаковым.
Что не так с моим кодом? Как я могу сделать все элементы в ViewBox
одинакового размера? Спасибо.