2010-04-15 39 views
1

我希望把我的自定義控件內的圖像,所以我的generic.xaml看上去象下面這樣:如何分配圖片URI在自定義的控制

<Style TargetType="local:generic"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="local:generic"> 
         <Grid Background="{TemplateBinding Background}"> 
          <Rectangle> 
           <Rectangle.Fill> 
            <SolidColorBrush x:Name="BackgroundBrush" Opacity="0" /> 
           </Rectangle.Fill> 
          </Rectangle> 
          <TextBlock Text="{TemplateBinding Text}" 
             HorizontalAlignment="Center" 
             VerticalAlignment="Center" 
             Foreground="{TemplateBinding Foreground}"/> 
          <Image Source="{TemplateBinding Source}" 
            HorizontalAlignment="Center" 
            VerticalAlignment="Center"/> 
         </Grid> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
</Style> 

我隱藏如下:

public class Generic : Control 
    { 
     public static DependencyProperty ImageUri = DependencyProperty.Register("Source", typeof(Uri), typeof(generic), new PropertyMetadata("")); 

     public Uri Source 
     { 
      get { return (Uri)GetValue(generic.ImageUri); } 
      set { SetValue(generic.ImageUri, value); } 

     } 
     public generic() 
     { 
      this.DefaultStyleKey = typeof(generic); 
     } 
} 

Apllication是編譯好的,但同時我想運行它拋出以下異常:

$exception 
{System.Windows.Markup.XamlParseException: System.TypeInitializationException: 
The type initializer for 'testCstmCntrl.themes.generic' threw an exception. ---> System.ArgumentException: Default value type does not match type of property. 

謝謝, Subhen

回答

0

現在得到它的工作,圖像源正在尋找作爲源的BitmapImage。因此,在獲取get方法中的值時,我們必須將Bitmap指定爲返回類型。

我們可以通過從dependencyProperty註冊名稱中傳遞我們的URI來返回位圖。

所以現在我的代碼看起來像下面:AGN所有您的建議和支持

public class generic : Control 
    { 
     public static DependencyProperty ImageUri = DependencyProperty.Register("Source", typeof(BitmapImage), typeof(generic), null); 

     public BitmapImage Source 
     { 
      get { 
       //return (Uri)GetValue(generic.ImageUri); 
       string strURI =(string) GetValue(generic.ImageUri); 
       return new BitmapImage(new Uri(strURI)); 
      } 
      set { SetValue(generic.ImageUri, value); } 

     } 
     public generic() 
     { 
      this.DefaultStyleKey = typeof(generic); 
     } 
    } 

感謝。

0

您的ProperyMetaData指定一個空字符串「」作爲默認值,但該屬性的類型爲Uri而不是String。改爲使用new PropertyMetaData(null)

因爲Uri屬性可以使用Xaml中的字符串來定義,所以很容易被誤解。但是,xaml解析器會處理字符串到Uri的轉換,因爲您似乎可以將字符串分配給Uri類型的屬性。然而,它不會在C#代碼中起作用。

+0

Thanx先生瓊斯先生,但我試圖從我的XAML分配圖像如下,它不顯示任何圖像: Simsons 2010-04-15 12:22:48

+0

另外我不確定爲什麼PropertyMetadata()不能接受URI。 – Simsons 2010-04-15 12:27:48

相關問題