글자 깨질때
1 | <Label FontSize="10" Content="대한민국" TextOptions.TextRenderingMode="Grayscale"/> | cs |
: Display 하면 작은 글자에서 뭉개지지 않음, 대신 확대 시 뭉개짐.
: IDeal 은 디폴트값으로 벡터기반이라 확대축소에도 뭉개지지 않음. 단 너무 작아지면 뭉개짐.
: 말고도 여러 옵션이 있음.
: 텍스트 뭉개진다고 뭐라하면 여기 손대면 됨.
: 텍스트 뭉개진다고 뭐라하면 여기 손대면 됨.
스크롤 너비
1 | <FrameworkElement Grid.Column="4" Width="{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}"/> | cs |
FrameworkElement 는 거의 모든 컨트롤의 조상임.
코드로 브러쉬 지정
1 2 | var converter = new System.Windows.Media.BrushConverter(); txt.Foreground = (Brush)converter.ConvertFromString("#FFFFFF90"); | cs |
기본브라우저로 창 띄우기
1 2 3 4 5 6 | RegistryKey rkey = Registry.ClassesRoot.OpenSubKey(@"http\shell\open\command"); string name = rkey.GetValue(null).ToString().ToLower().Replace("" + (char)34, ""); if (!name.EndsWith("exe")) name = name.Substring(0, name.LastIndexOf(".exe") + 4); rkey.Close(); System.Diagnostics.Process.Start(name, @"https://stackoverflow.com"); | cs |
Timer
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public Timer() { InitializeComponent(); DispatcherTimer tmr = new DispatcherTimer(); tmr.Interval = TimeSpan.FromMilliseconds(10); tmr.Tick += Tmr_Tick; tmr.Start(); } private void Tmr_Tick(object sender, EventArgs e) { lblTime.Content = string.Format("{0:HH:mm:ss.fff}", DateTime.Now); } | cs |
Thread 안전을 보장하는 DispatchTimer 를 사용.
이것은 Main Thread 에서만 돌아감.
1 2 3 4 | System.Timers.Timer tmr2 = new System.Timers.Timer(); tmr2.Interval = 1000; tmr2.Elapsed += Tmr2_Elapsed; tmr2.Start(); | cs |
SubThread 는 Timer 를 사용함.
나아가서 MainThread 에서만 접근할 수 있는 컨트롤엔 적용할 수 없음.
1 2 3 4 5 6 7 8 9 10 11 | public string strTm { get { return _strTm; } set { lock(_strTm) { _strTm = value; } } } | cs |
위 두가지 Timer 를 이용해서 스레드의 역할분배를 할 수 있음.
예를들어 작업은 Timer 에서 하고 처리한 값을 메모리에 저장해서 DispatchTimer에서 화면에 처리된 값을 보여주는 작업을 하는 것임.
이때 Lock 을 꼭 걸어줘야함.
WebBrowser
1 2 3 4 5 6 7 | <WebBrowser x:Name="wb"/> <WindowsFormsHost> <WindowsFormsHost.Child> <wf:WebBrowser x:Name="wb_wf" DocumentTitleChanged ="wb_wf_DocumentTitleChanged"/> </WindowsFormsHost.Child> </WindowsFormsHost> | cs |
1 2 3 4 | this.Title = (sender as System.Windows.Forms.WebBrowser).DocumentTitle; // 브라우저 타이틀 따기 wb.Navigate("http://www.naver.com"); // .net 내부에 있는 걸 쓰므로 웹브라우저 없어도 됨 wb_wf.Navigate("http://www.naver.com"); // .net 내부에 있는 걸 쓰므로 웹브라우저 없어도 됨 | cs |
HTML 문서 Title 따기
+ 브라우저 이동하기
내부 브라우저를 사용한다고 들었는데 확실하겐 모름.
Xaml 내 이동
1 2 3 | <Label> <Hyperlink NavigateUri="/MyInput.xaml">link</Hyperlink> </Label> | cs |
1 2 | frame.NavigationService.Navigate(new Uri("/MyInput.xaml", UriKind.Relative)); //Frame 은 Frame Control | cs |
SystemColor
1 | grd.Background = SystemColors.ControlBrush; | cs |
FlowDocument
1 2 3 4 5 6 | <FlowDocumentPageViewer> <FlowDocument> <Paragraph FontSize="30">sfddfsdfsdafsdafdsafsdaf</Paragraph> <Paragraph FontStyle="14">sadfdfasafsadfsdafsdafsdfsd</Paragraph> </FlowDocument> </FlowDocumentPageViewer> | cs |
강력한 기능.
비슷한 뷰어 종류가 몇개 있어서 필요한 기능을 위주로 사용하면 됨..
1 2 3 4 5 6 7 | FlowDocument flow = new FlowDocument(); Paragraph pTitle = new Paragraph(new Run("예시 문단이 들어갈 자리")); pTitle.FontSize = 30; flow.Blocks.Add(pTitle); flowDoc.Document = flow; | cs |
코딩으로도 가능함
Disigner Unsafe Mode 에서 작동안되는 부분 있음.
특히 ObjectDataProvider 에서 얻은 데이터가 적용 안됨.
자식 윈도우 찾기
1 | TextBox box = VisualTreeHelper.GetChild(_current_panel, 1) as TextBox; |
댓글 없음:
댓글 쓰기