繁体   English   中英

具有依赖项属性的WPF用户控件不起作用

[英]WPF User Control with Dependency Property not working

我正在编写WPF应用程序,并具有一个用户控件和几个要在多个地方使用的数据网格。 在每个地方,我希望字体大小都不同。

这是我正在尝试的:

.xaml:

<UserControl x:Class="RoviPutt.Controls.Leaderboard"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" 
      d:DesignHeight="605" d:DesignWidth="890">
    <UserControl.Resources>
        <Style TargetType="{x:Type DataGrid}" BasedOn="{StaticResource MetroDataGrid}">
            <Setter Property="FontSize" Value="{Binding TextSize}"/>
        </Style>
    </UserControl.Resources>
    <Grid>
        <ma:FlipView IsBannerEnabled="False">
            <ma:FlipView.Items>
                <Grid>
                    <DataGrid ItemsSource="{Binding ShowOverall.Leaders}" Margin="50" BorderThickness="2">
                        <DataGrid.Columns>
                            <DataGridTextColumn Header="RANK" Binding="{Binding Rank}" Width="Auto"/>
                            <DataGridTextColumn Header="NAME" Binding="{Binding Name}" Width="*"/>
                            <DataGridTextColumn Header="COMPANY" Binding="{Binding Company}" Width="*"/>
                            <DataGridTextColumn Header="SCORE" Binding="{Binding Score, StringFormat=N2}" Width="Auto"/>
                        </DataGrid.Columns>
                    </DataGrid>
                </Grid>
                <Grid>
                    <DataGrid ItemsSource="{Binding SessionOverall.Leaders}" Margin="50" BorderThickness="2">
                        <DataGrid.Columns>
                            <DataGridTextColumn Header="RANK" Binding="{Binding Rank}" Width="Auto"/>
                            <DataGridTextColumn Header="NAME" Binding="{Binding Name}" Width="*"/>
                            <DataGridTextColumn Header="COMPANY" Binding="{Binding Company}" Width="*"/>
                            <DataGridTextColumn Header="SCORE" Binding="{Binding Score, StringFormat=N2}" Width="Auto"/>
                        </DataGrid.Columns>
                    </DataGrid>
                </Grid>
            </ma:FlipView.Items>
        </ma:FlipView>
    </Grid>
</UserControl>

.xaml.cs:

public partial class Leaderboard : UserControl
{
    public Leaderboard()
    {
        InitializeComponent();
        var vm = new LeaderboardViewModel();
        vm.TextSize = TextSize;
        DataContext = vm;
    }

    #region Dependency Properties

    public int TextSize
    {
        get { return (int)GetValue(TextSizeProperty); }
        set { SetValue(TextSizeProperty, value); }
    }

    public static readonly DependencyProperty TextSizeProperty =
        DependencyProperty.Register("TextSize", typeof(int),
          typeof(Leaderboard));

    #endregion
}

ViewModel:

public class LeaderboardViewModel : BindableBase
{
    public LeaderboardViewModel()
    {

    }

    #region Properties

    /// <summary>
    /// Font size
    /// </summary>
    private int textSize;
    public int TextSize
    {
        get { return textSize; }
        set { SetProperty(ref textSize, value); }
    }

    /// <summary>
    /// Show overall game score leaderboard
    /// </summary>
    private Leaderboard showOverall;
    public Leaderboard ShowOverall
    {
        get { return showOverall; }
        set { SetProperty(ref showOverall, value); }
    }

    /// <summary>
    /// Session overall game score leaderboard
    /// </summary>
    private Leaderboard sessionOverall;
    public Leaderboard SessionOverall
    {
        get { return sessionOverall; }
        set { SetProperty(ref sessionOverall, value); }
    }

    #endregion
}

每当我使用以下方法设置TestSize属性时

<Leaderboard TextSize="20"/>

并检查.xaml.cs,我的TextSize为0。知道我在做什么错吗?

我假设绑定正在尝试在作为视图模型的DataContext找到TextSize属性,而不是在UserControl自己的属性中。

尝试给您的UserControl命名:

<UserControl .... x:Name="leaderBoard">

并将绑定更改为以下内容:

<Setter Property="FontSize" Value="{Binding TextSize, ElementName=leaderBoard}"/>

绑定有问题时,请始终检查Visual Studio的“输出”窗格。 绑定错误应在此处列出,并提示您可能有什么问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM