Как каждый элемент в ItemsControl автоматически масштабируется?

Melon NG спросил: 26 ноября 2017 в 05:39 в: c#

Мне нужно использовать 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 одинакового размера? Спасибо.


0 ответов