2009-03-12 3 views
13

Silverlight에서이 작업을 수행 할 수 없어 두 개의 테스트 프로젝트를 만들었습니다. 하나의 간단한 WPF 프로젝트와 하나의 간단한 Silverlight 프로젝트 : 코드에서 공개 정적 읽기 전용 변수를 설정하고 완전히 베어 본 XAML에서 사용합니다. WPF에서는 문제없이 작동합니다. 실버, 나는 다음과 같은 컴파일러 경고 및 런타임 오류 얻을 : 태그 '정적'XML 네임 스페이스 'http://schemas.microsoft.com/winfx/2006/xaml'에 존재하지 않는Silverlight 코드에서 생성 된 XAML의 정적 개체 사용

경고 2 ...

잘못된 속성 속성 텍스트의 값 {x : 정적 SilverlightApplication3 : Page.Test}. [줄 : 7 위치 : 25]

저는 이것이 Silverlight 2에서 지원되지 않는다고 가정합니다. 아니면 정말 간단한 것을 놓친 것입니까?

public partial class Window1 : Window 
{ 
    public static readonly string Test = "test"; 
    public Window1() 
    { 
     InitializeComponent(); 
    } 
} 

<Window x:Class="WpfApplication4.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="300" Width="300" 
     xmlns:WpfApplication4="clr-namespace:WpfApplication4">  
    <Grid> 
     <TextBlock Text="{x:Static WpfApplication4:Window1.Test}" /> 
    </Grid> 
</Window> 

을 여기에 SL 버전입니다 : 여기에 단지의 경우 모두에 대한 전체 코드는 후자의의 불행하게도

public partial class Page : UserControl 
    { 
     public static readonly string Test = "test"; 
     public Page() 
     { 
      InitializeComponent(); 
     } 
    } 

<UserControl x:Class="SilverlightApplication3.Page" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:SilverlightApplication3="clr-namespace:SilverlightApplication3" 
    Width="400" Height="300"> 
    <Grid x:Name="LayoutRoot" Background="White"> 
     <TextBlock Text="{x:Static SilverlightApplication3:Page.Test}" /> 
    </Grid> 
</UserControl> 

답변

5

, 그것은 정적 속성에 바인딩을 지원하지 않습니다 실버 같습니다 What is the {x:Static sdfsdf} equivalent?

+2

그건 엿 같아. 링크를 가져 주셔서 감사합니다. 검색 할 때 확실한 것을 찾지 못했지만 링크 된 게시물에서 대답 한 사람이 SL – Rich

+2

에 대한 권한입니다. WhyTF가 지원하지 않습니까?! –

6

불행히도 Silverlight에는 기능면에서 많은 한계가 있으며 방금 Silverlight 중 하나를 찾았습니다. StaticMarkupExpression은 SL2에서 지원되지 않습니다. 또한 스스로 정의 할 수도 없습니다.

MS에서 사람 : http://blogs.msdn.com/edmaia/archive/2008/11/23/animating-objects-visibility-in-silverlight.aspx

비결은

class Helper{ 
    public string Value {get{return Page.Test;}} 

// implement INotifyPropertyChange if you want updates 
} 

그리고 클래스는 정적 아니므로 다음

<Grid.Resources> 
    <somexmlns:Helper x:Key="Helper"/> 
</Grid.Resources> 

<TextBlock Text="{Binding Value, Source={StaticResource Helper}}"/> 
+0

간단한 문자열로 예제 에서처럼 효과가 있었지만 Color 객체 나 색상 표현을 사용하려고 할 때 XAML에서 하드 코딩 할 수있는 곳 (GradientStop Color = "# FAF6 ...), 다음과 같은 오류가 발생했습니다 : AG_E_PARSER_BAD_PROPERTY_VALUE 제한 사항은 무엇입니까? – Rich

+0

전체 구문을 사용합니다. 문자열은 Color 개체가 아니므로 문자열 개체에 할당 할 수 없습니다.그러나 전체 꺽쇠 괄호 구문을 사용하면 색상 * 객체 *를 지정할 수 있으며 정상적으로 작동합니다. 또는 Blend와 같은 생성기를 사용하고 단축 구문에서 Color 객체가 포함 된 속성을 표시하는 방식을 살펴보십시오. –

+0

'public static string Value {get {return Page.Test;}}'도 작동합니다. –

3

당신은 실제로 긴 정적 속성에 바인딩 할 수와 같은 개체를 사용 할 수있다 수업. 그래서 도우미 클래스의 이전 예제를 사용하여 :

public class Helper 
{ 
    public static string Value{ get {return Page.Test;} } 
} 

XAML은 동일하게 유지됩니다.

+0

안녕하세요 샘,'Page.Test'의 값이 업데이트되면 바인딩을 알리시겠습니까? –

+0

흠, 나는 그것을 작동시킬 수 없다. What xaml syntax, 여기에 추가 할 수 있습니까? –

1

색상에 바인딩하는 것에 대해 2 차적인 질문을 한 것으로 나타났습니다. 나는 그것이 Silverlight에서 할 수 있다고 생각하지 않는다. Silverlight에서 바인딩 대상에 대한 최소 요구 사항은 FrameworkElement입니다.

+0

그래 ... 몇 달 후, 내가 16 진수 문자열로 선언 할 수 있기 때문에 Color라고 생각하는 것에 바인딩하고 싶다면 실제로 브러시 객체 모든 것이 끝나고 끝날 때. 어떤 프로젝트에서이 질문을하고 있는지 기억이 나지 않지만, 지금 당장 필요하다면 색상이나 색상 표현 대신 정적 Brush 객체를 노출하면 이것이 효과가 있다고 상상해보십시오. – Rich

-2

정적 개체는 한 번만 인스턴스화되며 프로그램이 끝날 때까지 지속됩니다. 정적 개체는 범위 내에 있지 않지만 로컬 범위에서만 볼 수있는 경우에도 상태를 유지할 수 있습니다.

+2

실제로 부정확 한 답변을 한 이유를 이해 했으므로 C 파생 언어로 된 정적 키워드에 대해서는 언급하지 않고 정적 인 클래스 속성에 대한 태그 참조를 지원하는 StaticExtension 클래스의 XAML에서의 사용에 대해 설명합니다 당신의 대답이 묘사하는 의미에서. –

관련 문제