PDA

View Full Version : سوال: ساخت يك دكمه



water_lily_2012
پنج شنبه 01 اردیبهشت 1390, 10:58 صبح
سلام
من يك Border و يك Button دارم. مي خواهم با كليك روي دكمه، Border با يك StoryBoard به كنار صفحه برود و با كليك روي همان دكمه دوباره با يك StroyBoard سرجاي اوليه اش برگردد. تغيير مكان Border را مي دانم فقط نمي دانم چه كار كنم كه دكمه دو تا كار را بكنه. با كليك اول بفهمد كه به كنار برود و با كليك دوم سر جاي اوليه اش برگردد.
با تشكر

Amir Oveisi
پنج شنبه 01 اردیبهشت 1390, 18:04 عصر
تو رویداد کلیک باتن، با یک شرط چک کنید که اگر مقدار یک متغیری مثلا true بود کار اول رو بکنه و در غیر اینصورت کار دوم رو بکنه!

water_lily_2012
شنبه 03 اردیبهشت 1390, 11:37 صبح
من به صفحه زير مراجعه كردم و از كد آقا مهدي استفاده كردم ولي براي من درست كار نمي كرد.

http://barnamenevis.org/showthread.php?282281-%DA%86%D8%B7%D9%88%D8%B1-%D9%85%DB%8C%D8%AA%D9%88%D9%86%D9%85-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%A7%D8%AC%D8%B1%D8%A7-%D8%B4%D8%AF%D9%86-Storyboard-%D8%B4%D8%B1%D8%B7-%D8%A8%D8%B0%D8%A7%D8%B1%D9%85-%D8%9F&highlight=%D8%A7%D8%AC%D8%B1%D8%A7%D9%8A+storyboar d




if (this.bolBackClick == true)
{
System.Windows.Media.Animation.Storyboard gheymatUnAction = (System.Windows.Media.Animation.Storyboard)(FindRe source("GheymatUnAction"));
BeginStoryboard(gheymatUnAction);
}

مهدی فرزاد
چهارشنبه 07 اردیبهشت 1390, 18:00 عصر
سلام
این نمونه رو ببینید

bool Clicked;
private void button_Click(object sender, RoutedEventArgs e)
{
if (this.Clicked == false)
{
System.Windows.Media.Animation.Storyboard OnClick1 = (System.Windows.Media.Animation.Storyboard)(FindRe source("OnClick1"));
BeginStoryboard(OnClick1);
}
else
{
System.Windows.Media.Animation.Storyboard OnClick2 = (System.Windows.Media.Animation.Storyboard)(FindRe source("OnClick2"));
BeginStoryboard(OnClick2);
}
}

private void OnClick1_Completed(object sender, EventArgs e)
{
this.Clicked = true;
}

private void OnClick2_Completed(object sender, EventArgs e)
{
this.Clicked = false;
}



<Window.Resources>
<Storyboard x:Key="OnClick1" Completed="OnClick1_Completed">
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Childr en)[3].(TranslateTransform.X)" Storyboard.TargetName="border">
<SplineDoubleKeyFrame KeyTime="0:0:1" Value="220"/>
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Childr en)[3].(TranslateTransform.Y)" Storyboard.TargetName="border">
<SplineDoubleKeyFrame KeyTime="0:0:1" Value="222"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
<Storyboard x:Key="OnClick2" Completed="OnClick2_Completed">
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Childr en)[3].(TranslateTransform.X)" Storyboard.TargetName="border">
<SplineDoubleKeyFrame KeyTime="0:0:1" Value="0"/>
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Childr en)[3].(TranslateTransform.Y)" Storyboard.TargetName="border">
<SplineDoubleKeyFrame KeyTime="0:0:1" Value="0"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</Window.Resources>

water_lily_2012
یک شنبه 11 اردیبهشت 1390, 16:48 عصر
سلام
من دستورات را در WinManager.cs نوشتم ولي براي دستور زير خطا مي ده:

(FindResource("OpenLeftTab"));

چنين دستوري وجود نداره. احتمالا Using خاصي را نياز داره.

مهدی فرزاد
یک شنبه 11 اردیبهشت 1390, 18:24 عصر
این متد در کلاس Windows هست پس اگر دارید در کلاس که برای مدیریت استایل ویندوزتون درست کردید ازش استفاده میکنید باید به این شکل عمل کنید
Window window = ((FrameworkElement)sender).TemplatedParent as Window;
System.Windows.Media.Animation.Storyboard OnClick1 = (System.Windows.Media.Animation.Storyboard)(window .FindResource("OnClick1"));

water_lily_2012
دوشنبه 12 اردیبهشت 1390, 09:12 صبح
حالا اين مشكل را دارم. علت چيه. StoryBoard‌من در لايه اولي نيست. در داخل يك TabControl هست. آيا فرقي در صدا زدن مي كنه.
69421

مهدی فرزاد
دوشنبه 12 اردیبهشت 1390, 09:27 صبح
اگر StoryBoard شما مثلا در Resource یک Border تعریف شده مثل کد زیر
<Border.Resources>
<Storyboard x:Key="Storyboard1">
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Childr en)[3].(TranslateTransform.X)" Storyboard.TargetName="button">
<EasingDoubleKeyFrame KeyTime="0:0:1" Value="168"/>
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Childr en)[3].(TranslateTransform.Y)" Storyboard.TargetName="button">
<EasingDoubleKeyFrame KeyTime="0:0:1" Value="113"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</Border.Resources>

باید به این شکل فراخوانی بشه

border.FindResource("Storyboard1")

border در کد بالا X:Name مربوط به Border هست

برنامتون رو قرار بدید تا اصلاحش کنم

water_lily_2012
دوشنبه 12 اردیبهشت 1390, 09:57 صبح
در MSDN ديدم اصلا به طريقي خيلي ساده يك StroryBoard را اجرا كرده بود.
اين صفحه را ببينيد.

http://msdn.microsoft.com/en-us/library/system.windows.media.animation.storyboard%28v=vs.9 5%29.aspx


احتمال زياد مشكل از StoryBoard من باشه.

<Style x:Key="TabControlStyle1" TargetType="{x:Type TabControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TabControl}">
<ControlTemplate.Resources>
<Storyboard x:Key="OpenLeftTab" x:Name="OpenLeftTab" Completed="OpenLeftTab_Completed">
<ThicknessAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Margin)" Storyboard.TargetName="grid">
<EasingThicknessKeyFrame KeyTime="0" Value="0"/>
<EasingThicknessKeyFrame KeyTime="0:0:0.4" Value="-187,0,0,0"/>
</ThicknessAnimationUsingKeyFrames>
</Storyboard>

شما DoubleAnimation داريد ولي من ندارم. اين چي هست.

مهدی فرزاد
دوشنبه 12 اردیبهشت 1390, 12:26 عصر
سلام
مشکل از StoryBoard نیست
مثال منو دانلود کردید؟؟ طبق مثال من عمل کنید من مشکلی نمی بینم!!
روشی که در مثال MSDN استفاده شده به دوشکل کد نویسی در Xaml و کد نویسی C# رو برای ساخت StoryBoard معرفی کرده مشابه روشی هست که من در لینک زیر ازش استفاده کردم
http://barnamenevis.org/showthread.php?279004-%D9%85%D8%B4%DA%A9%D9%84-%D8%A8%D8%A7-%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF-%D8%A7%D9%86%DB%8C%D9%85%DB%8C%D8%B4%D9%86-Window-%D8%AF%D8%B1-%D8%AF%DB%8C%DA%A9%D8%B4%D9%86%D8%B1%DB%8C
اما مشکل شما ساخت StoryBoard نیست شما StoryBoard تعریف کردید و اونو آماده داریدفقط میخواید با توجه به یک شرط اجرا بشه که روش مناسب همونی هست که گفتم
شاید بخاطر اینکه شما دارید کد رو در کلاسی که برای مدیریت استایل ایجاد کردید مینویسید با مشکل مواجه شده
اگر برنامه نمونه رو بگذارید بهتر میشه کمک کرد

water_lily_2012
دوشنبه 12 اردیبهشت 1390, 14:42 عصر
مشكل اينكه وقتي داخل كلاس اصلي مي نويسم. قسمت فراخواني تابع در كد XMAL ايراد مي گيره و دنبال تابع مي گرده. برنامه انتظار داره تابع را داخل كلاس مديريت استايل بنويسم. و اصلا توجهي به توابع در كلاس اصلي نمي كنه.
چه كار كنم كه داخل هر دو كلاس را براي نام تابع جستجو كنه.

مهدی فرزاد
دوشنبه 12 اردیبهشت 1390, 17:49 عصر
من درست متوجه منظور شما نشدم
ولی یک نمونه براتون میگذارم که از یک پنجره دیگه یک انیمیشن رو در پنجره اصلی اجرا میکنه

بازم میگم نمونه کاری رو که دارد انجام میدید بگذارید