WPF用户控件与依赖属性不起作用

问题描述:

我正在写一个WPF应用程序,并有一个用户控件与我想在多个地方使用的几个数据网格。在每个地方,我希望字体大小不同。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 
} 

视图模型:

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的输出窗格中。绑定错误应该在那里列出,并会给你提示可能是错误的提示。

+0

这工作,谢谢! – arazzy