2016-08-30 3 views
-1

J'ai un fichier ResourceDictionary et j'ai aussi deux classes à utiliser pour cela.
L'un d'entre eux est IValueConverter et l'autre concerne le EventHandlers relatif au contrôle.
Le nom de la classe est EventHandlers défini comme valeur d'attribut x:Class.
Je dois également définir Converters en tant que seconde x:Class.
Mais je ne peux pas le faire parce que le concepteur lance une erreur qui dit x:Class is set more than one time.
Comment puis-je résoudre ce problème?Est-il possible de définir "x: Class" plus d'un dans un fichier ResourceDictionary?

Converters.cs

class Converters : IValueConverter 
{ 

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     double pr = (double)value; 
     AltoProgressBar bar = parameter as AltoProgressBar; 
     return pr * bar.Width/bar.Maximum; 

    } 

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

EventHandlers.cs

public partial class EventHandlers 
{ 
    private void progressBar_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) 
    { 
     ProgressBar progressBar = sender as ProgressBar; 
     var template = progressBar.Template; 

     //Find the Rectangle in the ControlTemplate 
     var layer = (Rectangle)(template.FindName("rect", progressBar)); 

     //Calculate the increment amount depending maxValue and Width 
     double artis = progressBar.Value * progressBar.Width/progressBar.Maximum; 

     DoubleAnimation anim = new DoubleAnimation(toValue: artis, duration: TimeSpan.FromMilliseconds(100)); 

     layer.BeginAnimation(Rectangle.WidthProperty, anim); 
    } 
} 

Styles.xaml

<ResourceDictionary xmlns:my="clr-namespace:AltoSS" 
       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
       x:Class="AltoSS.Converters" 
       <!--this doesn't make any sense--> 
       x:Class="AltoSS.EventHandlers"> 
<!--All styles in here--> 
</ResourceDictionary> 
+2

Réglage x: Class sur ResourceDictionary n'a pas de sens. Cela voudrait dire que ResourceDictionary est dérivé de cette classe. Ce que vous voulez certainement, c'est une déclaration d'espace de nommage XML comme 'xmlns: altoss =" clr-namespace: AltoSS "' et puis instancier des choses comme des convertisseurs dans le dictionnaire comme '' (nom de classe mauvais btw) . Encore une fois, vous devriez commencer à lire la documentation. – Clemens

Répondre

1

Je pense que c'est pas p ossible pour définir le x: Attribut de classe plusieurs fois (objectifs de polymorphisme). Si vous voulez seulement utiliser vos convertisseurs de classe (nom plus spécifique serait plus agréable) et votre EventHandeler vous devez définir les espaces de noms des deux classes dans RD-Tag (semblable à xmlns: YourNamespace = clr-namespace: YourProject. NamespaceName).

Ensuite, vous pouvez définir vos convertisseurs avec x: Key comme ressource statique.

comme celui-ci

<ResourceDictionary xmlns:my="clr-namespace:AltoSS" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:AltoConverters="AltoSS.NamespaceConverters" 
      xmlns:AltoEventHandlers="AltoSS.NamespaceEventHandlers"> 
      <!--NamespaceConverters and NamespaceEventHandlers from your cs files --> 

<!-- for use as static Resource -->  
<AltoConverters:Converters x:Key="YourConverters" /> 

    <!-- example --> 
    <Style TargetType="TextBlock"> 
     <Setter Property="Text" Value="{Binding ...Path..., Converter={StaticResource YourConverters}" /> 
    </Style> 
</ResourceDictionary>