» »

[WPF] Vrednost Textbox kot "angle" v AxisAngleRotation3D

[WPF] Vrednost Textbox kot "angle" v AxisAngleRotation3D

saule ::

V xaml sem si zrisal kocko, katero obrnem preko AxisAngleRotation3D:

.xaml
    <Window.Resources>
        <Storyboard x:Key="BoxStoryboard">
            <DoubleAnimation Storyboard.TargetName="BoxTransform" 
                   Storyboard.TargetProperty="Angle" 
                   To="20"
                   AutoReverse="True" RepeatBehavior="Forever" />
        </Storyboard>

        ....
        <RotateTransform3D>
           <RotateTransform3D.Rotation>
               <AxisAngleRotation3D x:Name="BoxTransform"
                                            Angle="10"
                                            Axis="0, 0, 1"/>
           </RotateTransform3D.Rotation>
        </RotateTransform3D>
    </Window.Resources>


.xaml.vb
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click

        Dim sbdLabelRotation As Storyboard = DirectCast(FindResource("BoxStoryboard"), Storyboard)
        sbdLabelRotation.Begin(Me)
    End Sub


Zadeva deluje po pričakovanjih, ne znam pa sedaj vključit še vrednosti iz GUI-ja:

.xaml
<Storyboard x:Key="BoxStoryboard">
            <DoubleAnimation Storyboard.TargetName="BoxTransform" 
                   Storyboard.TargetProperty="Angle" 
                   To="{DynamicResource BoxScale}"
                   AutoReverse="True" RepeatBehavior="Forever" />
        </Storyboard>


.xaml.vb
Resources.Add("BoxScale", 20)

        Dim sbdLabelRotation As Storyboard = DirectCast(FindResource("BoxStoryboard"), Storyboard)
        sbdLabelRotation.Begin(Me)


V tem primeru mi vrne error: '20' is not a valid value for property 'To'?

saule ::

Tole izgleda, da deluje:

.xaml
To= "{Binding Path=Test}"


.xaml.vb
 Public Angle As String

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click

        Me.DataContext = Me

        Angle = TextBox1.Text

        Dim sbdLabelRotation As Storyboard = DirectCast(FindResource("sbdLabelRotation"), Storyboard)
        sbdLabelRotation.Begin(Me)

    End Sub

    Public Property Test() As String
        Get
            Return Angle
        End Get

        Set(ByVal value As String)
            Angle = value
        End Set
    End Property

saule ::

Nov dan, nov problem :)

V zgornji rešitvi se pojavi problem, da se na formi ne osveži vrednost spremenljivke, če jo update-am. To pomeni, da se bo prva spremenljivka upoštevala pri klicu storyboard-a, če pa storyboard potem še enkrat pokličem s spremenjeno spremenljivko se bo storyboard sicer zagnal ampak z prejšnjo vrednostjo.

Kot sem bral, je to pač tako narejeno da xaml avtomatično predpostavi, da je vrednost "{Binding Path=spremenljivka}" vedno isti.

Našel sem rešitev, kako se osveži nek objekt (recimo label): BindingOperations.GetBindingExpressionBase(_lblValue, Label.ContentProperty).UpdateTarget(), ni mi pa jasno kako se osveži v mojem primeru, ker na Test nimam ContentProperty-a.

Našel sem tole, ki se mi zdi da je nekako podobno mojemu primeru, samo ne znam zadeve uporabit v praksi:
<Object Value="{Binding Path=ComplexValueObject, Converter={StaticResource ComplexValueConverter}, ConverterParameter=PropertyOne}" /> 

public class ComplexValueConverter : IValueConverter
{
  public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
  {
    ComplexValue cv = value as ComplexValue;
    string propName = parameter as string;
    switch (propName)
    {
      case "PropertyOne":
        return cv.PropertyOne;
      case "PropertyTwo":
        return cv.PropertyTwo;
      default:
        throw new Exception();
    }
  }

  public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
  {
    throw new NotImplementedException();
  }
}


Kakšna ideja?

Ericssony ::

Če te prav razumem: nastavi Binding Mode na TwoWay.
Več o tem pa tukaj: http://msdn.microsoft.com/en-us/library...

saule ::

Sem poskusil - dobim isti rezultat...

saule ::

Problem je bil, ker nisem uporabil INotifyPropertyChanged: http://social.msdn.microsoft.com/Forums...


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Visual Basic

Oddelek: Programiranje
313187 (2213) cekr
»

VB.net Excel v Tif

Oddelek: Programiranje
121060 (959) saule
»

Visual Studio - koda za prikaz OS?

Oddelek: Programiranje
91005 (772) detroit
»

[VB] Komunikacija s serijskimi napravami

Oddelek: Programiranje
412217 (1491) mNeRo
»

VB.net MDI in formi splošno

Oddelek: Programiranje
91481 (1424) strel

Več podobnih tem