문제

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 += ...).

프로그램은 다음과 같습니다.

enter image description here

나는 내 개인을 유지한다 FluentWpf Github의 도서관.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top