the_king
مدیرکل انجمن
sender ئه Clock ئه. توضیحات بخش Remark رو برای رخداد Timeline.Completed در سایت مایکروسافت بخونید.استاد ، الان در کد زیر ، نمیدونم چرا رویداد StoryboardPopupOpen_Completed ، اجرا نمیشه :
XML:<!-- SimpleComboBox --> <Style x:Key="SimpleComboBox" TargetType="{x:Type ComboBox}"> <Setter Property="SnapsToDevicePixels" Value="False"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type ComboBox}"> <Grid> <!--Template="{DynamicResource ComboBoxTextBox}"--> <!--The ToggleButton is databound to the ComboBox itself to toggle IsDropDownOpen--> <ToggleButton x:Name="ToggleButton" Template="{DynamicResource ComboBoxToggleButton}" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" Foreground="{TemplateBinding Foreground}" Focusable="False" IsChecked="{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" ClickMode="Press"/> <ContentPresenter x:Name="ContentSite" VerticalAlignment="Center" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="6,-2,20,0" IsHitTestVisible="False" TextBlock.Foreground="{TemplateBinding Foreground}" Content="{TemplateBinding SelectionBoxItem}" ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}" ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}"/> <!--The TextBox must be named PART_EditableTextBox or ComboBox will not recognize it--> <TextBox x:Name="PART_EditableTextBox" Template="{DynamicResource TextBoxOfComboBoxTemplate}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="0,0,20,0" Focusable="True" Background= "{DynamicResource TextBoxOfComboBoxBackground}" Foreground="{TemplateBinding Foreground}" Visibility="Hidden" IsReadOnly="{TemplateBinding IsReadOnly}" BorderBrush="{TemplateBinding BorderBrush}"/> <!--The Popup shows the list of items in the ComboBox. IsOpen is databound to IsDropDownOpen which is toggled via the ComboBoxToggleButton--> <Popup x:Name="PART_Popup" Height="3" Placement="Bottom" Focusable="False" AllowsTransparency="True" MaxHeight="{TemplateBinding MaxDropDownHeight}" MinWidth="{TemplateBinding ActualWidth}" MaxWidth="{TemplateBinding ActualWidth}"> <Grid x:Name="DropDown" SnapsToDevicePixels="True"> <Border x:Name="DropDownBorder" Background="{DynamicResource comb_Pop_Fill_Brush}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="1"/> <ScrollViewer Margin="4,6,4,6" SnapsToDevicePixels="True" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" CanContentScroll="True"> <ItemsPresenter/> </ScrollViewer> </Grid> </Popup> </Grid> <ControlTemplate.Triggers> <!--This forces the DropDown to have a minimum size if it is empty--> <Trigger Property="HasItems" Value="false"> <Setter Property="MinHeight" Value="40" TargetName="DropDownBorder"/> </Trigger> <Trigger Property="IsEnabled" Value="false"> <Setter TargetName="PART_EditableTextBox" Property="Foreground" Value="{DynamicResource DisabledForegroundBrush}"/> <Setter TargetName="PART_EditableTextBox" Property="Background" Value="{DynamicResource DisabledBackgroundBrush}"/> <Setter TargetName="PART_EditableTextBox" Property="BorderBrush" Value="{DynamicResource DisabledBorderBrush}" /> </Trigger> <Trigger Property="IsGrouping" Value="true"> <Setter Property="ScrollViewer.CanContentScroll" Value="false"/> </Trigger> <Trigger Property="AllowsTransparency" SourceName="PART_Popup" Value="true"> <Setter Property="CornerRadius" Value="4" TargetName="DropDownBorder"/> </Trigger> <Trigger Property="IsEditable" Value="true"> <Setter Property="IsTabStop" Value="false"/> <Setter TargetName="PART_EditableTextBox" Property="Visibility" Value="Visible"/> <Setter TargetName="ContentSite" Property="Visibility" Value="Hidden"/> </Trigger> <Trigger Property="IsDropDownOpen" Value="True"> <Setter TargetName="PART_Popup" Property="IsOpen" Value="True"/> <Trigger.EnterActions> <BeginStoryboard> <Storyboard Name="StoryboardPopupOpen" Storyboard.TargetName="PART_Popup" Storyboard.TargetProperty="Height" FillBehavior="Stop" Completed="StoryboardPopupOpen_Completed"> <DoubleAnimationUsingKeyFrames Duration="0:0:0.5"> <SplineDoubleKeyFrame KeyTime="0:0:0.5" Value="150" KeySpline="0.25,0.25 0.75,0.75"/> </DoubleAnimationUsingKeyFrames> </Storyboard> </BeginStoryboard> </Trigger.EnterActions> </Trigger> <Trigger Property="IsDropDownOpen" Value="False"> <Setter TargetName="PART_Popup" Property="IsOpen" Value="False"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style>
و در سی شارپ :
C#:private void StoryboardPopupOpen_Completed(object sender, EventArgs e) { Popup popup =(Popup)Storyboard.GetTarget(sender as DependencyObject); popup.Height = 360; //MessageBox.Show("hjkh"); }
بریک پوینت میذارم . MessageBox.Show میذارم . هیچ کدوم را اجرا نمیکنه . نمیدونم چرا .
میخوام وقتی انیمیشن تمام شد ، مقدار Height ئه اون Popup را که 3 هست را تغییر بده (به اندازه ی MaxHeight ئه Popup کنه) .
مشکل از کجاست که اصلا اون رویداد اجرا نمیشه؟
XML:
<Window.Resources>
<Storyboard Completed="StoryboardPopupOpen_Completed" FillBehavior="Stop" x:Key="StoryboardPopupOpen" Storyboard.TargetName="PART_Popup" Storyboard.TargetProperty="Height" Duration="0:0:0.5">
<DoubleAnimationUsingKeyFrames>
<SplineDoubleKeyFrame KeyTime="0:0:0.5" Value="150" KeySpline="0.25,0.25 0.75,0.75"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</Window.Resources>
XML:
<Trigger Property="IsDropDownOpen" Value="True">
<Setter TargetName="PART_Popup" Property="IsOpen" Value="True"/>
<Trigger.EnterActions>
<BeginStoryboard Storyboard="{StaticResource StoryboardPopupOpen}"/>
</Trigger.EnterActions>
</Trigger>
باید بر اساس شرایط خودتون تصمیم بگیرید، نظر من بر اساس توانایی و قابلیت های خودم خواهد بود و بدرد شخص دیگری نمیخوره.و اینکه استاد ، wpf ، کنترلِ numericupdown نداره . به نظرتون من که میخوام کمترین میزان استفاده را از کتابخونه های خارجی (برای استفاده از کنترل ها) کنم (اگه بخوام استفاده کنم ، حجم کل کتابخونه های استفاده شده ی خارجی برای کل کنترل هام میخوام حداکثر زیر 1 مگابایت باشه) ، بهتره که این کنترل را از nuget دانلود کنم (چند تا کنترل numericupdown که سازنده های مختلفی دارن ، در nuget هست) یا اینکه از کمپوننت و کنترل هایی که شرکت های مختلف تولید کردن ، استفاده کنم یا اینکه خودم بسازم؟