336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

WPF에서는 메인스레드에서 생성한 컨트롤에 다른 스레드가 접근하지 못하도록 되어있습니다.

 

접근하려고 하면 다음과 같은 에러메시지에 직면하죠 :

다른 스레드가 이 개체를 소유하고 있어 호출한 스레드가 해당 개체에 액세스할 수 없습니다.”

 

Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate

{

    lblStatus.Content = "동작중"; // 해당 소스

}));

 

다음과 같이 메인 Dispatcher를 통해 라벨내용을 변경시켜주시면 문제없이 돌아갑니다.


출처 : http://inasie.tistory.com/16

Posted by 역시인생한방
,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

C# String Formatting 

UPDATE: I show alternate ways to use string formats in WPF in this post:WPF String Formatting

This entry has been copied from SteveX (http://blog.stevex.net/index.php/string-formatting-in-csharp/) for my own easy reference.

The text inside the curly braces is {index[,alignment][:formatString]}. If alignment is positive, the text is right-aligned in a field the given number of spaces; if it’s negative, it’s left-aligned.

Strings

There really isn’t any formatting within a string, beyond it’s alignment. Alignment works for any argument being printed in a String.Format call.

SampleGenerates
String.Format(”->{1,10}<-”, “Hello”);-> Hello<-
String.Format(”->{1,-10}<-”, “Hello”);->Hello <-


Numbers

Basic number formatting specifiers: 

SpecifierTypeFormatOutput (Passed Double 1.42)Output (Passed Int -12400)
cCurrency{0:c}$1.42-$12,400
dDecimal (Whole number){0:d}System.FormatException-12400
eScientific{0:e}1.420000e+000-1.240000e+004
fFixed point{0:f}1.42-12400.00
gGeneral{0:g}1.42-12400
nNumber with commas for thousands{0:n}1.42-12,400
rRound trippable{0:r}1.42System.FormatException
xHexadecimal{0:x4}System.FormatExceptioncf90


Custom number formatting:

SpecifierTypeExampleOutput (Passed Double 1500.42)Note
0Zero placeholder{0:00.0000}1500.4200Pads with zeroes.
#Digit placeholder{0:(#).##}(1500).42
.Decimal point{0:0.0}1500.4
,Thousand separator{0:0,0}1,500Must be between two zeroes.
,.Number scaling{0:0,.}2Comma adjacent to Period scales by 1000.
%Percent{0:0%}150042%Multiplies by 100, adds % sign.
eExponent placeholder{0:00e+0}15e+2Many exponent formats available.


;
Group separator
see below

The group separator is especially useful for formatting currency values which require that negative values be enclosed in parentheses. This currency formatting example at the bottom of this document makes it obvious:

Dates

Note that date formatting is especially dependant on the system’s regional settings; the example strings here are from my local locale.

SpecifierTypeExample (Passed System.DateTime.Now)
dShort date10/12/2002
DLong dateDecember 10, 2002
tShort time10:11 PM
TLong time10:11:29 PM
fFull date & timeDecember 10, 2002 10:11 PM
FFull date & time (long)December 10, 2002 10:11:29 PM
gDefault date & time10/12/2002 10:11 PM
GDefault date & time (long)10/12/2002 10:11:29 PM
MMonth day patternDecember 10
rRFC1123 date stringTue, 10 Dec 2002 22:11:29 GMT
sSortable date string2002-12-10T22:11:29
uUniversal sortable, local time2002-12-10 22:13:50Z
UUniversal sortable, GMTDecember 11, 2002 3:13:50 AM
YYear month patternDecember, 2002


The ‘U’ specifier seems broken; that string certainly isn’t sortable.

Custom date formatting:

SpecifierTypeExampleExample Output
ddDay{0:dd}10
dddDay name{0:ddd}Tue
ddddFull day name{0:dddd}Tuesday
f, ff, …Second fractions{0:fff}932
gg, …Era{0:gg}A.D.
hh2 digit hour{0:hh}10
HH2 digit hour, 24hr format{0:HH}22
mmMinute 00-59{0:mm}38
MMMonth 01-12{0:MM}12
MMMMonth abbreviation{0:MMM}Dec
MMMMFull month name{0:MMMM}December
ssSeconds 00-59{0:ss}46
ttAM or PM{0:tt}PM
yyYear, 2 digits{0:yy}02
yyyyYear{0:yyyy}2002
zzTimezone offset, 2 digits{0:zz}-05
zzzFull timezone offset{0:zzz}-05:00
:Separator{0:hh:mm:ss}10:43:20
/Separator{0:dd/MM/yyyy}10/12/2002


Enumerations

SpecifierType
gDefault (Flag names if available, otherwise decimal)
fFlags always
dInteger always
xEight digit hex.


Some Useful Examples

String.Format(”{0:$#,##0.00;($#,##0.00);Zero}”, value);

This will output “$1,240.00? if passed 1243.50. It will output the same format but in parentheses if the number is negative, and will output the string “Zero” if the number is zero.

String.Format(”{0:(###) ###-####}”, 8005551212);

This will output “(800) 555-1212?.


출처 : http://mikestedman.blogspot.kr/2008/10/c-string-formatting.html

'Programming > C#' 카테고리의 다른 글

StringFormat 양수(+) / 음수(-) 표시  (0) 2015.02.05
#region #endregion  (0) 2015.02.05
UI Thread Marshalling - Invoke, BeginInvoke  (0) 2015.02.04
데이터 타입의 종류와 범위  (0) 2015.02.04
연산자 우선순위  (0) 2015.02.04
Posted by 역시인생한방
,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

ControlTemplate을 정의할때 부모 컨트롤의 속성을 받아들이기 위해 TemplateBinding을 사용한다. 즉, ControlTemplate을 버튼 내부에 정의한다고 가정했을때 해당 ControlTemplate 내의 Rectangle 요소와 버튼의 Width를 동일하게 맞추고 싶다면 Rectangle 요소의 Width 속성에 버튼의 Width 속성을 바인딩 시켜야 하며 이때 TemplateBinding을 이용해 간편하게 바인딩 시킬수 있다.  

 

<Button.Template>

    <ControlTemplate>

         ...... 

         <Rectangle Width ="{TemplateBinding Width}" ...

         ....

    </ControlTempalte>

</Button.Template/>

 

TemplateBinding은 Binding 과 그 역할이 동일하다. 따라서 다음의 코드도 똑같은 효과를 볼수 있다.

 

<Rectangle Width ="{Binding Width,RelativeSource={RelativeSource TemplatedParent}" ...

 

그렇다면 둘 중 어느것을 사용하는 것이 옳을까? 기본적으로 TemplateBinding이 Binding에 비해 훨씬 가볍다. 하지만 TemplateBinding과 Binding은 다음의 2가지 측면에서 확연히 다르다.

 

첫번째, TemplateBinding은 양방향 바인딩을 지원하지 않는다. 따라서 TwoWay 같은 바인딩 클래스의 기능은 지원하지 않는다.


두번째, TemplateBinding은 Freezable 클래스에서 상속된 클래스 속성과의 바인딩을 지원하지 않는다. 따라서 Brush 나 Pen 등에 바인딩하기 위해선 TempalteBinding이 아닌 Binding을 이용해야 한다.

 

<Button.Template>

    <ControlTemplate>

         ...... 

          <Rectangle Width ="{TemplateBinding Width}"

                   Fill ="{Binding Background,RelativeSource={RelativeSource TemplatedParent}" />

    </ControlTempalte>

</Button.Template/>

 

따라서 ControlTemplate 을 정의할땐 가벼운 TempateBinding을 이용하되, Rectangle의 Fill이나 Background, Foreground 같은 Brush 타입의 속성, 즉 Freezable 을 상속받는 속성에는 Binding을 이용해야 할 것이다.


출처 : http://blog.naver.com/gone98/80194439294

Posted by 역시인생한방
,