'WPF'에 해당되는 글 4건

  1. 2017.05.16 [WPF] 다국어
  2. 2017.04.18 [WPF] Command Pattern
  3. 2017.04.17 [WPF] Design Mode
  4. 2010.08.05 [WPF] 레이아웃
2017. 5. 16. 10:22

공통

    public static class LangPack

    {

        static LangPack()

        {

            Resources = new Dictionary<Language, Dictionary<string, string>>();


            Dictionary<string, string> kr = new Dictionary<string, string>();

            kr.Add("language", "한국어");


            Dictionary<string, string> en = new Dictionary<string, string>();

            en.Add("language", "영어");


            Dictionary<string, string> ch = new Dictionary<string, string>();

            ch.Add("language", "중국어");


            Resources.Add(Language.Korean, kr);

            Resources.Add(Language.English, en);

            Resources.Add(Language.Chinese, ch);

        }


        private static Dictionary<Language, Dictionary<string, string>> Resources;


        public static string GetString(string key)

        {

            if (Resources.ContainsKey(App.SelectedLanguage))

            {

                if (Resources[App.SelectedLanguage].ContainsKey(key))

                    return Resources[App.SelectedLanguage][key];

            }


            return string.Empty;

        }

    }


컨버터

    public class LanguageConverter : IValueConverter

    {

        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)

        {

            if (parameter == null)

                return string.Empty;


            if (parameter is string)

                return LangPack.GetString((string)parameter);

            else

                return string.Empty;

        }


        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)

        {

            throw new NotImplementedException();

        }

    }


Application Resource

   <Application.Resources>

        <ResourceDictionary>

            <converter:LanguageConverter x:Key="LangConverter" />

            <ObjectDataProvider x:Key="language"

                ObjectType="{x:Type lang:LangPack}"

                MethodName="GetString" >

                <ObjectDataProvider.MethodParameters>

                    <s:String>language</s:String>

                </ObjectDataProvider.MethodParameters>

            </ObjectDataProvider>

        </ResourceDictionary>

    </Application.Resources>


XAML

<Button Content="{Binding Source={StaticResource language}}" />

<Button Content="{Binding Converter={StaticResource LangConverter},  ConverterParameter=language}" />







Posted by CoolDragon
2017. 4. 18. 10:38

Command Pattern



선언

    public class DelegateCommand : ICommand
    {
        private Action<object> _execute;
        private Predicate<object> _canExecute;

        public DelegateCommand(Action<object> execute)
               : this(execute, null)
        {
        }

        public DelegateCommand(Action<object> execute, Predicate<object> canExecute)
        {
            _execute = execute;
            _canExecute = canExecute;
        }

        public bool CanExecute(object parameter)
        {
            return _canExecute == null ? true : _canExecute(parameter);
        }

        public event EventHandler CanExecuteChanged = delegate { };

        public void Execute(object parameter)
        {
            _execute(parameter);
        }

        public void RaiseCanExecuteChanged()
        {
            CanExecuteChanged(this, EventArgs.Empty);
        }
    }


구현

        private ICommand _addCommand;
        public ICommand AddCommand
        {
            get
            {
                return _addCommand ??
                    (_addCommand = new DelegateCommand(
                        p => { 
                            // Add 로직 
                        },
                        p => { // Command 사용여부 
                                  return true; 
                        }
                    ));
            }
        }




Xaml

<Button Content="Add" Command={Binding AddCommand} />

<Window.InputBidings>
    <KeyBinding Key="A"
                       Modifiers="Control"
                       Command={Binding AddCommand} />
</Window.InputBidings>




Posted by CoolDragon
2017. 4. 17. 16:39

WPF

if (DesignerProperties.GetIsInDesignMode(new System.Windows.DependencyObject()))

{

  // Design Time Code

}

else

{

  // Runtime Code

}


WindowPhone, Silverlight

if (DesignerProperties.IsInDesignTool)

{

  // Design Time Code

}

else

{

  // Runtime Code

}


Windows Store

if (DesignerProperties.DesignModeEnabled)

{

  // Design Time Code

}

else

{

  // Runtime Code

}






Posted by CoolDragon
2010. 8. 5. 18:17
1. StackPanel
  - 자식요소가 수평으로(좌에서 우)으로 쌓이거나 위에서 아래로 쌓이게 하는 패널
  - 주요 프로퍼티
[결합속성]
Orientation
  - Vertical : 수직모드
  - Horizontal : 수평모드

2. Canvas
  - Canvas의 offset 값(Top, Left, Right, Bottom 속성값)에 따라 자식요소를 위치를 지정하는  패널
  - 주요 프로퍼티
[결합속성]
Canvas.Top="90"
   - 자식요소가 Canvas의 상단(Top)으로부터 얼마나 떨어질 것인지 설정 
Canvas.Left="90"
   - 자식요소가 Canvas의 왼쪽(Left)으로부터 얼마나 떨어질 것인지 설정
Canvas.Right="90"
   - 자식요소가 Canvas의 오른쪽(Right)으로부터 얼마나 떨어질 것인지 설정
Canvas.Bottom="90"
   - 자식요소가 Canvas의 하단(Bottom)으로부터 얼마나 떨어질 것인지 설정
  - Top, Left, Right, Bottom는 결합(Attach)속성로 자식요소에서 Canvas.Top="10" 형태로 설정한다.
  - 자식요소에 좌표를 지정하면 설정한 위치에 고정된다.
 
3. DockPanel
  - 자식요소의 DockPanel.Dock 결합속성값 설정에 따라서 위치가 결정
  - 주요 프로퍼티
[의존속성]
LastChildFill
   - 마지막 자식요소가 나머지 영역을 채우도록 설정한다. (true/false)
[결합속성]
DockPanel.Dock="Top"
   - 자식요소가 DockPanel의 상단으로 붙인다.
DockPanel.Dock="Left"
   - 자식요소가 DockPanel의 좌측으로 붙인다.
DockPanel.Dock="Right"
   - 자식요소가 DockPanel의 우측으로 붙인다.
DockPanel.Dock="Bottom"
   - 자식요소가 DockPanel의 바닥으로 붙인다.
 - DockPanel.Dock 설정을 하지 않은 자식요소는 DockPanel의 Content 영역, 즉 가운데에 붙인다.
 

4. Grid


5. UniformGrid


6. ViewBox


Posted by CoolDragon