WPF TabControl, rounded TabItem
Есть замечательный пример, как сделать закладки с закруглёнными краями с помощью модификации стиля WPF TabControl и TabItem, но он не поддерживает нижнее расположение закладок TabStripPlacement=»Bottom».
Небольшая модификация примера позволила расположить закладки снизу. Загрузите Полный исходный код для VisualStudio 2010, с 3-имя вариантами TabControl и изменением стиля для нижнего расположения закладок.
ДалееСохраняем AVI файл из WPF
Собственно сохранение скриншотов WPF программы с помощью RenderTargetBitmap и BitmapEncoder не новость. Сложнее сохранить анимацию и не просто в набор картинок, а сразу в AVI файл.
Мне удалось найти только один способ сделать это, с использованием весьма старой библиотеки http://www.codeproject.com/KB/audio-video/avifilewrapper.aspx Библиотека предназначена для работы с AVI файлами из .NET, написана на C# и работает даже на .NET 1.1.
Если вы знаете другой способ, подскажите!
Если вы хотите работать с AVI из WPF, посмотрите сразу другой пример http://blogs.msdn.com/b/saveenr/archive/2008/09/22/wpf-xaml-saving-an-animation-as-an-avi-video-file.aspx
Пример хороший, но передавать Bitmap через файл слишком накладно, лучше использовать MemoryStream.
BmpBitmapEncoder encoder = new BmpBitmapEncoder(); encoder.Frames.Add(BitmapFrame.Create(renderTargetBitmap)); using (MemoryStream stream = new MemoryStream()) { encoder.Save(stream); System.Drawing.Bitmap drawingBitmap = new System.Drawing.Bitmap(stream); aviStream.AddFrame(drawingBitmap); }
Сохранение AVI было необходимо для улучшения программы Particler, поэтому пришлось провести серию экспериментов.
ДалееИндикатор загрузки (progress bar) для WPF
Если ваше WPF приложение медленно загружается, то в зависимости от причины есть 2 выхода — или добавлять Splash Screen в случае, когда приложение «тяжелое» само по себе, или ограничится показом индикатора загрузки данных, если само приложение стартует быстро, но потом еще подгружает объемные данные (например 3D модели).
Такая задача возникла и передо мной. Хотелось сделать круговой индикатор загрузки, похожий на индикатор загрузки Silverlight приложений. Быстрый поиск в интернете подобрал 2 подходящих индикатора:
http://www.codeproject.com/KB/WPF/FrameBasedAnimation.aspx, http://www.codeproject.com/KB/smart/Sonic.aspx
Первый мне не понравился потому, что во-первых не компилировался без доработок, а во вторых имел огромное количество C# кода, без которого в WPF вполне можно было обойтись, решив всё на уровне XAML.
Второй индикатор был значительно красивее и работал, но крутил всю картинку целиком, не создавая эффект перелива цветов, а вызывая впечатление, что на нём решили сэкономить.
Небольшая доработка заключалась в том, что я заменил DoubleAnimation на DiscreteDoubleKeyFrame и теперь индикатор загрузки не вращается, а красиво переливается.
Вместо:
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="SpinnerRotate" Storyboard.TargetProperty="(RotateTransform.Angle)" From="0" To="360" Duration="0:0:01" RepeatBehavior="Forever" />
</Storyboard>
</BeginStoryboard>
Сделаем так:
<BeginStoryboard>
<Storyboard>
<DoubleAnimationUsingKeyFrames Duration="0:0:12" RepeatBehavior="Forever" SpeedRatio="12" Storyboard.TargetName="SpinnerRotate" Storyboard.TargetProperty="(RotateTransform.Angle)">
<DiscreteDoubleKeyFrame KeyTime="00:00:00" Value="0" />
<DiscreteDoubleKeyFrame KeyTime="00:00:01" Value="30" />
...
<DiscreteDoubleKeyFrame KeyTime="00:00:11" Value="330" />
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
Результат:
Загрузить компонент Circular Progress Bar и тестовый проект (14,4 Кб)
В следующий раз, я покажу на примере как использовать этот же код для progress bar в Silverlight.
Далее
Свежие комментарии