2016-09-25 3 views
0

Ich habe eine ScrollViewer die Width Eigenschaft bindet an ein anderes Seitenelement. Ich möchte dies auf nur bestimmte AdaptiveTrigger MinWindowWidthWie setze ich ScrollViewer Breite gebunden an ein Seitenelement ActualWidth in AdaptiveTrigger UWP

<ScrollViewer x:Name="scrollViewerEditor" Width="{Binding ElementName=stackPanelSearch, Path=ActualWidth}"> 
    ... 
</ScrollViewer> 

ich die Width Bindung in AdaptiveTrigger wie die folgenden platzieren möchten anzuwenden. Was ist der richtige Weg, es zu tun?

<VisualState x:Name="VisualStateWide"> 
    <VisualState.StateTriggers> 
     <AdaptiveTrigger MinWindowWidth="{StaticResource WideMinWidth}" /> 
    </VisualState.StateTriggers> 
    <VisualState.Setters> 
     <Setter Target="scrollViewerEditor.(FrameworkElement.Width)" Value="Binding ElementName=stackPanelSearch, Path=ActualWidth}" /> 

Antwort

0

Wenn Sie im Code diese Arbeit nicht tun etwas dagegen, hinter, gibt es einen einfachen Weg, um dieses Problem zu lösen, wie dies die VisualStateGroup.CurrentStateChanged event zum Beispiel mit:

<VisualStateManager.VisualStateGroups> 
    <VisualStateGroup CurrentStateChanged="VisualStateGroup_CurrentStateChanged"> 
     <VisualState x:Name="VisualStateNarrow"> 
      <VisualState.StateTriggers> 
       <AdaptiveTrigger MinWindowWidth="0" /> 
      </VisualState.StateTriggers> 
      <VisualState.Setters> 
       <Setter Target="scrollViewerEditor.Style" Value="{StaticResource ScrollViewerStyle1}" /> 
      </VisualState.Setters> 
     </VisualState> 
     <VisualState x:Name="VisualStateWide"> 
      <VisualState.StateTriggers> 
       <AdaptiveTrigger MinWindowWidth="720" /> 
      </VisualState.StateTriggers> 
      <VisualState.Setters> 
       <Setter Target="scrollViewerEditor.Style" Value="{StaticResource ScrollViewerStyle2}" /> 
      </VisualState.Setters> 
     </VisualState> 
    </VisualStateGroup> 
</VisualStateManager.VisualStateGroups> 

In Code-behind :

private void VisualStateGroup_CurrentStateChanged(object sender, VisualStateChangedEventArgs e) 
{ 
    var state = e.NewState; 
    if (state.Name == "VisualStateNarrow") 
    { 
     scrollViewerEditor.Width = 300; 
    } 
    else 
    { 
     if (tb.ActualWidth != 0) 
      scrollViewerEditor.Width = tb.ActualWidth; 
     else 
      scrollViewerEditor.Width = 600; 
    } 
} 

Es ist nicht in Setter, in der Regel den richtigen Weg, um dieses Problem zu lösen Bindungsdaten verwenden darf einen benutzerdefinierten AttachedProperty fürerstellenund binden Sie diese angefügte Eigenschaft an die WidthProperty, aber die Unterstützung für benutzerdefinierte angefügte Eigenschaft in der VisualState ist nicht ganz ideal, werde ich weiter darüber recherchieren und sehen, ob es mit benutzerdefinierten AttachedProperty funktioniert.

+0

wäre ideal, dass die Bindung in Setter (x: Bind zum Beispiel) funktionieren würde, rannte in diese selbst auch – Depechie

+0

@Depechie, wie ich weiß, x: Bind auch nicht in Setter arbeiten, und ich habe viel versucht, scheint AttachedProperty funktioniert hier nicht gut ... –

Verwandte Themen