Sample.xaml.cs asp.netのようなファイルのパブリック変数にアクセスするにはどうすればよいですか<%=VariableName%>
?
これを行うにはいくつかの方法があります。
コードビハインドからリソースとして変数を追加します。
myWindow.Resources.Add("myResourceKey", myVariable);
次に、XAMLからアクセスできます。
<TextBlock Text="{StaticResource myResourceKey}"/>
XAMLの解析後に追加する必要がある場合は、DynamicResource
の代わりに上記のStaticResource
を使用できます。
変数をXAMLの何かのプロパティにします。通常、これはDataContext
を介して機能します。
myWindow.DataContext = myVariable;
または
myWindow.MyProperty = myVariable;
この後、XAMLのすべてのものがBinding
を介してアクセスできます。
<TextBlock Text="{Binding Path=PropertyOfMyVariable}"/>
または
<TextBlock Text="{Binding ElementName=myWindow, Path=MyProperty}"/>
バインディングでは、DataContext
が使用されていない場合、これをコードビハインドのコンストラクタに追加するだけです。
this.DataContext = this;
これを使用して、コード内のすべてのプロパティがバインディングにアクセス可能になります。
<TextBlock Text="{Binding PropertyName}"/>
別の方法は、XAMLのルート要素に名前を付けるだけです。
x:Name="root"
XAMLは分離コードの部分クラスとしてコンパイルされるため、すべてのプロパティに名前でアクセスできます。
<TextBlock Text="{Binding ElementName="root" Path=PropertyName}"/>
注:アクセスできるのはプロパティのみです。フィールドではありません。 set;
およびget;
または{Binding Mode = OneWay}
が必要です。 OneWayバインディングを使用する場合、基になるデータはINotifyPropertyChangedを実装する必要があります。
WPFの手っ取り早いWindowsでは、WindowのDataContextをウィンドウ自体にバインドすることを好みます。これはすべてXAMLで実行できます。
Window1.xaml
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
DataContext="{Binding RelativeSource={RelativeSource self}}"
Title="Window1" Height="300" Width="300">
<StackPanel>
<TextBlock Text="{Binding Path=MyProperty1}" />
<TextBlock Text="{Binding Path=MyProperty2}" />
<Button Content="Set Property Values" Click="Button_Click" />
</StackPanel>
</Window>
Window1.xaml.cs
public partial class Window1 : Window
{
public static readonly DependencyProperty MyProperty2Property =
DependencyProperty.Register("MyProperty2", typeof(string), typeof(Window1), new UIPropertyMetadata(string.Empty));
public static readonly DependencyProperty MyProperty1Property =
DependencyProperty.Register("MyProperty1", typeof(string), typeof(Window1), new UIPropertyMetadata(string.Empty));
public Window1()
{
InitializeComponent();
}
public string MyProperty1
{
get { return (string)GetValue(MyProperty1Property); }
set { SetValue(MyProperty1Property, value); }
}
public string MyProperty2
{
get { return (string)GetValue(MyProperty2Property); }
set { SetValue(MyProperty2Property, value); }
}
private void Button_Click(object sender, RoutedEventArgs e)
{
// Set MyProperty1 and 2
this.MyProperty1 = "Hello";
this.MyProperty2 = "World";
}
}
上記の例では、WindowのDataContext
プロパティで使用されているバインディングに注意してください。これは「データコンテキストを自分に設定する」という意味です。 2つのテキストブロックはMyProperty1
およびMyProperty2
にバインドされ、ボタンのイベントハンドラーはこれらの値を設定します。これらの値は、プロパティとして2つのTextBlocksのText
プロパティに自動的に伝達されます。依存関係プロパティです。
また、「Binding」はDependencyObjectのDependencyPropertyでのみ設定できることに注意してください。 XAMLのオブジェクトに非DependencyProperty(たとえば、通常のプロパティ)を設定する場合、コードビハインドでリソースを使用するRobertの最初の方法を使用する必要があります。