2011-10-26 6 views
2

ここに私のユーザーコントロール(MonthCal)のコードがあります。xamlでUsercontrolのカスタム依存関係を設定する

public partial class MonthCal : UserControl 
{ 
    public DayOfWeek StartDayOfWeek { get { return (DayOfWeek)GetValue(StartDayOfWeekProperty); } set { SetValue(StartDayOfWeekProperty, value); } } 
    public static readonly DependencyProperty StartDayOfWeekProperty = DependencyProperty.Register("StartDayOfWeek", typeof(DayOfWeek), typeof(MonthCellHeader), new UIPropertyMetadata(DayOfWeek.Sunday, StartDayOfWeek_PropertyChanged)); 
    //... 
} 

また、ここにはMonthCalのxamlがあります。

<UserControl x:Class="GCDR.MonthCal" 
      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"> 
    <!-- ... --> 
</UserControl> 

だから、どうすればxamlの 'StartDayOfWeek'依存関係プロパティを設定できますか?あなたが知っているとおり、次のコードは不可能です:

<UserControl ... 
      StartDayOfWeek="Sunday"> 
</UserControl> 

私に助けを与えてください。

あなたはユーザーコントロールのマークアップに依存関係プロパティを使用することはできませんが、あなたはどこかにそのようなユーザーコントロールのインスタンスを配置するとき、あなたがそれを使用することができます

答えて

1

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:local="clr-namespace:WpfApplication1"> 
    <Grid> 
     <local:UserControl1 local:StartDayOfWeek="Friday" /> 
    </Grid> 
</Window> 

あなたには、いくつかの他のをバインドすることができ、ユーザーコントロール内でそのようなあなたの依存関係プロパティのプロパティ:あなたは、他のワードユーザーコントロールタイプで、StartDayOfWeekはXAMLでユーザーコントロールがStartDayOfWeek依存関係プロパティを持っていないということです設定できないのはなぜ

<UserControl x:Class="WpfApplication1.UserControl1" 
      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" 
      xmlns:local="clr-namespace:WpfApplication1" 
      mc:Ignorable="d" > 
    <Grid> 
     <Label Content="{Binding RelativeSource={RelativeSource AncestorType=local:UserControl1},Path=StartDayOfWeek}" /> 
    </Grid> 
</UserControl> 
0

はMonthCalタイプではありません。

XAMLでは、UserControlがUserControl1の基本クラスであるため、MonthCal継承UserControlを定義してからXAMLでMonthCalを宣言できます。

XAML

<local:MonthCal x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:WpfApplication1" Title="MainWindow" 
       Height="350" Width="525" 
       StartDayOfWeek="Monday"> 
    <Grid></Grid> 
</local:MonthCal> 

Codebehinde

namespace WpfApplication1 
{ 
    public class MonthCal : Window 
    { 
     public DayOfWeek StartDayOfWeek { get { return (DayOfWeek)GetValue(StartDayOfWeekProperty); } set { SetValue(StartDayOfWeekProperty, value); } } 
     public static readonly DependencyProperty StartDayOfWeekProperty = 
      DependencyProperty.Register("StartDayOfWeek", typeof(DayOfWeek), typeof(MonthCal), new UIPropertyMetadata(DayOfWeek.Sunday, StartDayOfWeek_PropertyChanged)); 

     private static void StartDayOfWeek_PropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
     { 
     } 
    } 

    public partial class MainWindow : MonthCal 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
     } 
    } 
} 
関連する問題