2012-03-01 26 views
0

如果我將一個.cs文件中定義的ValueConverter添加到ResourceDictionary中,並多次將其用作靜態資源,它會創建新實例還是隻使用同一個?ResourceDictionary中的ValueConverter是Singleton?

--------------------------------- ValueConverterDefinition ------------ -------------------

internal class DateTimeConverter : IValueConverter 
{ 
    #region IValueConverter Members 

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     var date = (DateTime)value; 
     return date.Day; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 

    #endregion 
} 

------------------------ --------- ResourceDictionary -------------------------------

<converter:DateTimeConverter x:Key="DateTimeConverter"></converter:DateTimeToSpecificFormatConverter> 
<Style x:Key="ToolTipStyle" TargetType="{x:Type ToolTip}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="ToolTip"> 
       <Border> 
        <Grid>       
         <TextBlock Foreground="Black"> 
         <TextBlock.Text> 
          <Binding Path="StartDate" Converter="{StaticResource DateTimeConverter}"></Binding> 
         </TextBlock.Text> 
         </TextBlock> 
         <TextBlock Foreground="Black"> 
         <TextBlock.Text> 
          <Binding Path="EndDate" Converter="{StaticResource DateTimeConverter}"></Binding> 
         </TextBlock.Text> 
         </TextBlock> 
        </Grid> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
+0

我不認爲人們會在這裏談論單身人士,因爲這通常是指涉及靜態實例的特定設計模式。 – 2012-03-01 01:59:43

回答

1

這是相同的情況下,添加它在概念上等同於這樣做:

var converter = new DateTimeConverter(); 
control.Resources.Add("Key", converter); 

StaticResource然後通過密鑰查找該實例。

但是,您可以使用x:Shared來更改該行爲,以便每個參考都創建一個新實例。

+0

謝謝,HB!它與ResourceDictionary定義的部分有關嗎?如果它是App.Resources,它只在整個App構建時創建;但如果它是UserControl.Resource,它將創建一個新實例每個UserControl實例?對嗎? – Claw 2012-03-01 02:13:24

+0

@PekingOperaInAlaska:是的,這是正確的(如果您在聲明中討論資源而不是該UserControl的實例) – 2012-03-01 02:21:42