유창한 WPF 프로젝트가 있습니까? [닫은
-
20-09-2019 - |
문제
WPF/XAML과 관련하여 진행중인 노력의 일환으로 UI 코딩에 유창한 인터페이스를 적용하는 데 관심이 있습니다.
유창한 실버 라이트를 알고 있습니다.http://code.google.com/p/fluent-silverlight/), 그러나 나는 WPF와 동등한 것을 찾을 수없는 것 같습니다.
개인적인 메모와 마찬가지로 XAML과 C#/MVVM의 조합으로 모든 것을하는 것이 매우 어렵다는 것을 알게되었습니다. 선언적 XAML보다 코드로 더 잘 표현되는 UI 프로그래밍 (예 : 데이터 바인딩)의 특정 측면이있는 것 같습니다.
유창한 WPF 인터페이스는 이러한 목표를 달성하기위한 것인 것 같습니다.
해결책
WPF에서 명령을 구축하기위한 유창한 APIhttp://code.google.com/p/present/
다른 팁
최근에 팟 캐스트의 팟 캐스트에서 : http://herdingcode.com/?p=212 손님 중 한 명이 WPF UI를 만들기위한 유창한 인터페이스를 시도했다고 논의합니다. 그들 중 하나가 그들이 한 일을 사용할 수있게 할 수 있습니다.
또한,이 같은 팟 캐스트와 그 이전의 팟 캐스트 (http://herdingcode.com/?p=208) Code First vs. First와 XAML에 집중하는 것이 유리한 이유에 대한 우려 사항에 대해 문의하십시오.
논쟁은 주로 코드의 테스트 가능성 외에도 UIS를 "혼합 가능"(Microsoft Expression Blend로 설계 할 수 있음)에 관한 것입니다. 코드 기반 접근 방식은 조심하지 않으면이 능력을 감소시킵니다.
당신은 당신의 오해에 혼자가 아닙니다. 이 팟 캐스트가 결정을 내리는 데 도움이되기를 바랍니다.
유창한 스타일로 프로그램을 선호하는 WPF의 일부를 시작하면 개인 유틸리티 어셈블리에 지원 확장 방법을 추가합니다.
예를 들어 다음은 다음을 보여주는 프로그램입니다. TaskbarItemInfo
ProgressValue
그리고 ProgressState
속성. 이 버전은 표준 비 유량 방식으로 작성됩니다.
using System.Windows;
using System.Windows.Controls;
using System.Windows.Shell;
namespace TaskbarItemProgress
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
TaskbarItemInfo = new TaskbarItemInfo();
TaskbarItemInfo.ProgressValue = 0.5;
var stackPanel = new StackPanel();
Content = stackPanel;
var normalButton = new Button() { Content = "Normal" };
normalButton.Click += (s, e) =>
TaskbarItemInfo.ProgressState = TaskbarItemProgressState.Normal;
stackPanel.Children.Add(normalButton);
var pausedButton = new Button() { Content = "Paused" };
pausedButton.Click += (s, e) =>
TaskbarItemInfo.ProgressState = TaskbarItemProgressState.Paused;
stackPanel.Children.Add(pausedButton);
var errorButton = new Button() { Content = "Error" };
errorButton.Click += (s, e) =>
TaskbarItemInfo.ProgressState = TaskbarItemProgressState.Error;
stackPanel.Children.Add(errorButton);
var indeterminateButton = new Button() { Content = "Indeterminate" };
indeterminateButton.Click += (s, e) =>
TaskbarItemInfo.ProgressState = TaskbarItemProgressState.Indeterminate;
stackPanel.Children.Add(indeterminateButton);
var noneButton = new Button() { Content = "None" };
noneButton.Click += (s, e) =>
TaskbarItemInfo.ProgressState = TaskbarItemProgressState.None;
stackPanel.Children.Add(noneButton);
var increaseButton = new Button() { Content = "Increase" };
increaseButton.Click += (s, e) => TaskbarItemInfo.ProgressValue += 0.10;
stackPanel.Children.Add(increaseButton);
var decreaseButton = new Button() { Content = "Decrease" };
decreaseButton.Click += (s, e) => TaskbarItemInfo.ProgressValue -= 0.10;
stackPanel.Children.Add(decreaseButton);
}
}
}
유창한 버전은 다음과 같습니다.
using System.Windows;
using System.Windows.Controls;
using System.Windows.Shell;
using FluentWpf;
namespace TaskbarItemProgress
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
TaskbarItemInfo = new TaskbarItemInfo();
TaskbarItemInfo.ProgressValue = 0.5;
Content = new StackPanel()
.AddChildren(
new Button() { Content = "Normal" }
.AddClick((s, e) => TaskbarItemInfo.ProgressState = TaskbarItemProgressState.Normal),
new Button() { Content = "Paused" }
.AddClick((s, e) => TaskbarItemInfo.ProgressState = TaskbarItemProgressState.Paused),
new Button() { Content = "Error" }
.AddClick((s, e) => TaskbarItemInfo.ProgressState = TaskbarItemProgressState.Error),
new Button() { Content = "Indeterminate" }
.AddClick((s, e) => TaskbarItemInfo.ProgressState = TaskbarItemProgressState.Indeterminate),
new Button() { Content = "None" }
.AddClick((s, e) => TaskbarItemInfo.ProgressState = TaskbarItemProgressState.None),
new Button() { Content = "Increase" } .AddClick((s, e) => TaskbarItemInfo.ProgressValue += 0.10),
new Button() { Content = "Decrease" } .AddClick((s, e) => TaskbarItemInfo.ProgressValue -= 0.10));
}
}
}
유창한 버전은 두 가지 확장 방법을 사용하고 있습니다. AddChildren
(대신에 Children.Add
) 그리고 AddClick
(대신에 Click += ...
).
프로그램은 다음과 같습니다.
나는 내 개인을 유지한다 FluentWpf
Github의 도서관.