c# - 예제 - 자마린 xaml




XAML에서 Silverlight의 코드로 만든 정적 개체 사용 (4)

불행히도 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}}"/>

이 기능을 Silverlight에서 사용할 수 없으므로 두 가지 테스트 프로젝트를 만들었습니다. 하나의 간단한 WPF 프로젝트와 하나의 간단한 Silverlight 프로젝트 : 코드에서 공개 정적 읽기 전용 변수를 설정하고 완전히 베어 본 XAML에서 사용합니다. WPF에서는 장애없이 작동합니다. Silverlight에서 다음 컴파일러 경고 및 런타임 오류가 발생합니다.

경고 2 태그 '정적'XML 네임 스페이스 ' http://schemas.microsoft.com/winfx/2006/xaml '존재하지 않습니다 ...

속성 텍스트의 속성 값 {x : Static 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>

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


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


클래스가 정적 클래스가 아닌 한 실제로 정적 속성에 바인딩 할 수 있습니다. 따라서 Helper 클래스의 이전 예제를 사용하면 다음과 같습니다.

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

XAML은 그대로 유지됩니다.







xaml