4
VisualState에서 Setters Value 속성을 사용하여 바인딩을 실제로 사용할 수 있습니까? x : Bind를 사용하려고하면 페이지의 초기 뷰가 바인딩을 사용하지 않고 Binding은 페이지를 사용하지 않기 때문입니다. 그 (것)들을 이제까지 이용하십시오 또는 나는 무언가를 추가 할 필요가 있는가?VisualState Setters의 UWP 바인딩
예를 들어 아래 레이아웃을 사용하고 400에서 800 사이의 너비로 앱을 시작하면 PassInput Passwordbox에 자리 표시자가 없습니다. 창 크기를 800 이상으로 조정 한 다음 마침내 자리 표시자를 갖습니다.
예 :
<Page
x:Class="UWP.Learning.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
x:Name="Page">
<RelativePanel Background="White">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="WindowSizeStates">
<VisualState x:Name="SmallState">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="400" />
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="PassInput.PlaceholderText" Value="{x:Bind MyPlaceHolder, Mode=OneWay}" />
</VisualState.Setters>
</VisualState>
<VisualState x:Name="WideState">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="800" />
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="PassInput.PlaceholderText" Value="{x:Null}" />
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<TextBlock
Name="PassLabel"
RelativePanel.AlignTopWithPanel="True"
RelativePanel.AlignLeftWithPanel="True"
RelativePanel.AlignRightWithPanel="True"
Text="Pass input label"
HorizontalAlignment="Center" />
<PasswordBox
Name="PassInput"
RelativePanel.AlignLeftWithPanel="True"
RelativePanel.AlignRightWithPanel="True"
RelativePanel.Below="PassLabel"
VerticalAlignment="Center"
Margin="20,0" />
</RelativePanel>
</Page>
코드 숨김
namespace UWP.Learning
{
using Windows.UI.Xaml.Controls;
public sealed partial class MainPage : Page
{
public MainPage() { this.InitializeComponent(); }
public string MyPlaceHolder => "FOOBAR";
}
}
그래서 XamlBehaviors를 사용하여 시각적 상태에 대한 새로 고침을 호출하고보고했습니다. – WaggaWagga
나는 이것을 버그라고 부를지 모르겠다. 나에게 그것은 이와 같이 보입니다 - PasswordBox.Placeholder가 아니라 setter의 값이 바인드됩니다. 따라서 우리가 속성과 cal * OnPropertyCHanged *를 변경하면 아무 일도 일어나지 않을 것입니다. 따라서 setter의 값만 영향을받습니다. 변경 사항을 보려면 시각적 상태를 호출해야합니다. 로드 중 * 이벤트에서 'x : Bind'가 설정되고 처음 트리거가 호출되면 바인딩이 준비되지 않고 트리거가 충돌하여 확인할 수 있습니다. * WindowSizeStates.CurrentState * is *없는*. – Romasz
이전 바인딩을 사용하고 FallbackValue를 설정하면 처음 사용 된 것을 볼 수 있습니다. 이전 바인딩을 사용하면 Loaded 이벤트를 호출 할 수 있습니다 : 'VisualStateManager.GoToState (this, WindowSizeStates.CurrentState.Name, false);'그리고 새로운 'x : Bind'를 사용하여 바인딩이 해결되지 않았으므로 사용할 수 없습니다 * CurrentState *는 널입니다. – Romasz