2016-08-30 6 views
-1

나는 ResourceDictionary 파일을 가지고 있으며,이 파일을 사용할 두 가지 클래스가 있습니다.
그 중 하나는 IValueConverter이고 다른 하나는 대조와 관련된 EventHandlers입니다.
클래스 이름은 EventHandlers이며 x:Class 속성 값으로 설정됩니다.
또한 Converters을 두 번째 x:Class으로 설정해야합니다.
디자이너가 x:Class is set more than one time이라고하는 오류를 발생시키기 때문에이 작업을 수행 할 수 없습니다.
이 문제를 어떻게 해결할 수 있습니까?"x : Class"를 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

설정 X 같은

하십시오 ResourceDictionary에에 클래스가 이해가되지 않습니다. ResourceDictionary는 해당 클래스에서 파생된다는 의미입니다. xmlns : altoss = "clr-namespace : AltoSS"와 같은 XML 네임 스페이스 선언을 원한다면 사전처럼''(나쁜 클래스 이름 btw) . 다시 말하지만, 당신은 문서를 읽기 시작해야합니다. – Clemens

답변

1

는 생각 이잖아하지 P ossible : x : Class-Attribute를 여러 번 설정합니다 (다형성 목표).

Converters (보다 구체적인 이름은 더 좋을 것입니다.)와 EventHandeler 만 사용하려는 경우 두 클래스의 네임 스페이스를 RD-Tag에 정의해야합니다 (xmlns : Yournamespace = clr-namespace : YourProject와 유사). NamespaceName).

그런 다음 x : Key를 정적 변환기로 정의 할 수 있습니다. 이

<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>