簡體   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