Forum » Programiranje » [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
.xaml.vb
Zadeva deluje po pričakovanjih, ne znam pa sedaj vključit še vrednosti iz GUI-ja:
.xaml
.xaml.vb
V tem primeru mi vrne error: '20' is not a valid value for property 'To'?
.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
.xaml.vb
.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:
Kakšna ideja?
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...
Več o tem pa tukaj: http://msdn.microsoft.com/en-us/library...
saule ::
Problem je bil, ker nisem uporabil INotifyPropertyChanged: http://social.msdn.microsoft.com/Forums...
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Visual BasicOddelek: Programiranje | 3426 (2452) | cekr |
» | VB.net Excel v TifOddelek: Programiranje | 1145 (1044) | saule |
» | Visual Studio - koda za prikaz OS?Oddelek: Programiranje | 1079 (846) | detroit |
» | [VB] Komunikacija s serijskimi napravamiOddelek: Programiranje | 2301 (1575) | mNeRo |
» | VB.net MDI in formi splošnoOddelek: Programiranje | 1611 (1554) | strel |