2009-05-13 13 views
3

カスタム依存プロパティにバインドするときにWPFデザイナを更新する際に問題が発生しました。WPFデザイナーと依存関係プロパティへのバインドの問題

次の例では、カスタムMyAwesomeFillプロパティを設定する単純な楕円を作成します。 MyAwesomeFillのデフォルト値は黄色のソリッドカラーブラシです。

問題は、デザイナーの制御フォームでは、楕円(黄色)のデフォルトの塗りつぶしが見えず、代わりに楕円がSolidColor(#00000000)で埋められているということです。しかし、アプリケーションを実行すると、すべてが完璧に機能します。

これがなぜ起こっているのか、ご意見はありますか?

ありがとうございました。

ここで私が使用するコードです:

XAML:

<UserControl x:Class="TestApplication.MyEllipse" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Height="300" Width="300"> 
    <Grid> 
     <Ellipse Stroke="Black" StrokeThickness="5" Fill="{Binding MyAwesomeFill}"></Ellipse> 
    </Grid> 
</UserControl> 

C#:背後

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Data; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Imaging; 
using System.Windows.Navigation; 
using System.Windows.Shapes; 

namespace TestApplication 
{ 
    public partial class MyEllipse : UserControl 
    { 
     #region Dependency property MyAwesomeFill 
     //Define and register dependency property 
     public static readonly DependencyProperty MyAwesomeFillProperty = DependencyProperty.Register(
      "MyAwesomeFill", 
      typeof(Brush), 
      typeof(MyEllipse), 
      new PropertyMetadata(new SolidColorBrush(Colors.Yellow), new PropertyChangedCallback(OnMyAwesomeFillChanged)) 
     ); 

     //property wrapper 
     public Brush MyAwesomeFill 
     { 
      get { return (Brush)GetValue(MyAwesomeFillProperty); } 
      set { SetValue(MyAwesomeFillProperty, value); } 
     } 

     //callback 
     private static void OnMyAwesomeFillChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e) 
     { 
      MyEllipse m = (MyEllipse)obj; 
      m.OnMyAwesomeFillChanged(e); 
     } 
     #endregion 

     //callback 
     protected virtual void OnMyAwesomeFillChanged(DependencyPropertyChangedEventArgs e) 
     { 
     } 

     public MyEllipse() 
     { 
      InitializeComponent(); 

      DataContext = this; 
     } 

    } 
} 

答えて

3

コードは、デザイナーによって実行されることが保証されていませんが。 MyEllipseコントロールをウィンドウに追加すると、ウィンドウ内の楕円は黄色の背景になりますが、コントロールを直接見ると表示されません。これは、あなたのコントロールのユーザーにとって重要なことが機能することを意味します。

デザイナーでMyEllipseを開くときに見栄えを良くするには、フォールバック値を追加します。

<Ellipse 
    Stroke="Black" 
    StrokeThickness="5" 
    Fill="{Binding MyAwesomeFill, FallbackValue=Yellow}"> 
</Ellipse> 
+1

真実ですが、コントロールを開発する際には重大な後退です。そのコントロールを他のコントロールなどで確認する必要があります。ウィンドウまたはフォールバック値をデフォルトの値に設定する必要があります。私は本当にこれがVS 2010で修正されることを願っています。 –

+0

さて、1年が経過し、これはまだ2010年に修正されていません!これは本当にひどいです! – Nils

関連する問題