'2009/05'에 해당되는 글 9건
- 2009/05/18 Silverlight – bubbling events (2)
- 2009/05/14 C# : Unit Class - File Size
- 2009/05/12 Silverlight – DispatcherTimer , Clock
- 2009/05/10 Silverlight – Dynamic Page load
- 2009/05/10 Silverlight – Host Settings
- 2009/05/08 Javascript – 이벤트 추가
- 2009/05/07 Silverlight OpenFileDialog
- 2009/05/07 Silverlight - Access HTML document
- 2009/05/05 Silverlight - Access managed code form javascript
이번 내용은 실버라이트에서 개체가 중첩되어 있을 때 이벤트가 중첩(버블링, Bubbling)되는 현상을 막기 위한 방법인데요.
두서 없이 작성한 내용이라 저도 무슨 소린지 모르겠네요 - _-;;
중요한 내용은 4~5번 내용을 살펴보시면 이해가 되실거에요.
1. XAML 코드
<UserControl x:Class="BubblingEvents.Page"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="400" Height="300">
<Grid x:Name="LayoutRoot" Background="White">
<Grid x:Name="SubPanel" Margin="28,20,33,26" Background="#FF4084CE" Grid.Row="3">
<Ellipse x:Name="Ellipse1" Margin="47,48,129,43" Stroke="#FF000000">
<Ellipse.Fill>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#FF0D4C07"/>
<GradientStop Color="#FF239E16" Offset="1"/>
</LinearGradientBrush>
</Ellipse.Fill>
</Ellipse>
<Ellipse x:Name="Ellipse2" Margin="146,79,61,43" Stroke="#FF000000">
<Ellipse.Fill>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#FF490B68"/>
<GradientStop Color="#FFF56DFD" Offset="1"/>
</LinearGradientBrush>
</Ellipse.Fill>
</Ellipse>
</Grid>
<TextBlock x:Name="Output" HorizontalAlignment="Left" VerticalAlignment="Top"/>
</Grid>
</UserControl>
2. C# Code
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
namespace BubblingEvents
{
public partial class Page : UserControl
{
private Int16 _sequence = default(Int16);
public Page()
{
InitializeComponent();
InitHandlers();
}
private void InitHandlers()
{
this.MouseLeftButtonDown += new MouseButtonEventHandler(MouseLeftClickHandler);
this.SubPanel.MouseLeftButtonDown += new MouseButtonEventHandler(MouseLeftClickHandler);
this.Ellipse1.MouseLeftButtonDown += new MouseButtonEventHandler(MouseLeftClickHandler);
this.Ellipse2.MouseLeftButtonDown += new MouseButtonEventHandler(MouseLeftClickHandler);
}
void MouseLeftClickHandler(Object sender, MouseButtonEventArgs e)
{
Trace((sender as FrameworkElement).Name);
}
private void Trace(String name)
{
this.Output.Text = String.Format("[{0}] {1}\n{2}", ++_sequence, name, this.Output.Text);
}
}
}
3. 버블링이 발생한다
(클릭순서 1. 파란배경, 2 녹색원, 3보라원)
4. 버블링 제거 코드
Ellipse를 포함하고 있는 Grid의 이벤트에서만 별도로 이벤트를 작성해 준다
private void InitHandlers()
{
this.MouseLeftButtonDown += new MouseButtonEventHandler(MouseLeftClickHandler);
this.SubPanel.MouseLeftButtonDown += new MouseButtonEventHandler(SubPanel_MouseLeftButtonDown);
this.Ellipse1.MouseLeftButtonDown += new MouseButtonEventHandler(MouseLeftClickHandler);
this.Ellipse2.MouseLeftButtonDown += new MouseButtonEventHandler(MouseLeftClickHandler);
}
void SubPanel_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
Trace((sender as FrameworkElement).Name);
e.Handled = true;
}
5. 상위의 개체가 하위의 개체의 이벤트 전달을 막지 않도록 설정
IsHitTestVisable 속성을 이용하여 사용자의 마우스나 키보드 등의 입력이 전달되는 것을 막지 않을 수 있다.
…
<Ellipse x:Name="Ellipse2" Margin="146,79,61,43" Stroke="#FF000000" IsHitTestVisible="False">
<Ellipse.Fill>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#FF490B68"/>
<GradientStop Color="#FFF56DFD" Offset="1"/>
</LinearGradientBrush>
</Ellipse.Fill>
</Ellipse>
</Grid>
<TextBlock x:Name="Output" HorizontalAlignment="Left" VerticalAlignment="Top" IsHitTestVisible="False" />
…
'.NET > Silverlight' 카테고리의 다른 글
| Silverlight – Custom control (0) | 2009/07/03 |
|---|---|
| Silverlight Custom control (0) | 2009/06/23 |
| Silverlight – bubbling events (2) | 2009/05/18 |
| Silverlight – DispatcherTimer , Clock (0) | 2009/05/12 |
| Silverlight – Dynamic Page load (0) | 2009/05/10 |
| Silverlight – Host Settings (0) | 2009/05/10 |
이전에 올렸던 Length 단위에 이어 두번째 File Size 관련된 단위입니다.
귀찮았는데 막상 파일사이즈를 보여야 할 일이 있어서
간단히 Property 를 이용해서 작성해 봤네요.
C# 프로퍼티(Property)의 가장 적절한 예가 아닌가 생각됩니다. ㅋㅋㅋ
class FileSize
{
public enum UNITS { B, KB, MB, GB, TB }
double b = 0;
double kb = 0;
double mb = 0;
double gb = 0;
double tb = 0;
public double B
{
get
{
return this.b;
}
set
{
this.b = value;
this.kb = this.b / 1024;
this.mb = this.kb / 1024;
this.gb = this.mb / 1024;
this.tb = this.gb / 1024;
}
}
public double KB
{
get
{
return this.kb;
}
set
{
this.kb = value;
this.B = this.kb * 1024;
}
}
public double MB
{
get
{
return this.mb;
}
set
{
this.mb = value;
this.KB = this.mb * 1024;
}
}
public double GB
{
get
{
return this.gb;
}
set
{
this.gb = value;
this.MB = this.gb * 1024;
}
}
public double TB
{
get
{
return this.tb;
}
set
{
this.tb = value;
this.GB = this.tb * 1024;
}
}
public FileSize(double size)
{
this.B = size;
}
public override string ToString()
{
string ret = string.Empty;
if (b < 1024D)
{
ret = string.Format("{0}{1}", b, UNITS.B.ToString());
}
else if (kb < 1024D)
{
ret = string.Format("{0}{1}", kb, UNITS.KB.ToString());
}
else if (mb < 1024D)
{
ret = string.Format("{0}{1}", mb, UNITS.MB.ToString());
}
else if (gb < 1024D)
{
ret = string.Format("{0}{1}", gb, UNITS.GB.ToString());
}
else
{
ret = string.Format("{0}{1}", tb, UNITS.TB.ToString());
}
return ret;
}
}
'.NET > C#' 카테고리의 다른 글
| Windows Service Debugging (0) | 2009/10/21 |
|---|---|
| Unicode 한글 코드 표 (0) | 2009/09/27 |
| C# : Unit Class - File Size (0) | 2009/05/14 |
| Memory usage of current thread on C# windows form app. (0) | 2009/04/23 |
| C# : TextBox Auto Scrolling (2) | 2009/04/20 |
| Better string.IsNullOrEmpty() ? How to do C#.NET 3.0 (0) | 2009/04/14 |
DispatcherTimer 를 이용해 시계를 만들어보도록 한다.
먼저 using으로 using System.Windows.Threading; Namespace를 추가해야 하고 다음을 따라 진행한다
-
Xaml
<UserControl x:Class="ClockSample.Page"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="400" Height="300">
<Grid x:Name="LayoutRoot" Background="White">
<TextBlock FontSize="60" TextAlignment="Center" VerticalAlignment="Center" x:Name="tbTime" Text="12:00:00" />
</Grid>
</UserControl>
- Code
public Page()
{
InitializeComponent();
TimerSetting();
}
private void TimerSetting()
{
DispatcherTimer timer = new DispatcherTimer()
{
Interval = TimeSpan.FromMilliseconds(50)
};
timer.Tick += new EventHandler(timer_Tick);
timer.Start();
}
void timer_Tick(object sender, EventArgs e)
{
this.tbTime.Text = DateTime.Now.ToString("HH:mm:ss");
}
-
다음과 같이 시계가 잘 작동한다.
'.NET > Silverlight' 카테고리의 다른 글
| Silverlight Custom control (0) | 2009/06/23 |
|---|---|
| Silverlight – bubbling events (2) | 2009/05/18 |
| Silverlight – DispatcherTimer , Clock (0) | 2009/05/12 |
| Silverlight – Dynamic Page load (0) | 2009/05/10 |
| Silverlight – Host Settings (0) | 2009/05/10 |
| Silverlight OpenFileDialog (0) | 2009/05/07 |
Silverlight에서 네비게이션(메뉴에 따른 페이지 호출?)을 작성하기 위해 넘겨온 값에 따라 시작되는 비주얼을 지정하면 된다.
그를 위해 다음과 같은 코드가 필요하다.
Private void Application_Startup(object sender, StartupEventArgs e)
{
String machineid = e.InitParams["machineid"];
this.RootVisual = new Page(machineid);
}
'.NET > Silverlight' 카테고리의 다른 글
| Silverlight – bubbling events (2) | 2009/05/18 |
|---|---|
| Silverlight – DispatcherTimer , Clock (0) | 2009/05/12 |
| Silverlight – Dynamic Page load (0) | 2009/05/10 |
| Silverlight – Host Settings (0) | 2009/05/10 |
| Silverlight OpenFileDialog (0) | 2009/05/07 |
| Silverlight - Access HTML document (0) | 2009/05/07 |
실버라이트를 Host 하는 플러그–인 구동 정보에 접근이 가능하다
쉽게 말해서 Silverlight를 HTML에 띄울 때 설정한 OBJECT 테그의 param 값들에 접근할 수 있다는 소리
-
Object 테그에서 Parameter로 설정 정보들 (대부분 읽기전용이다. 왜? html에서 설정한 내용을 읽어온 것이니깐..)
this.Host.Settings.안의 프로퍼티 들을 이용해 다양한 개발이 가능하다.
흠... 유용한 처리를 할 수 있을 듯…
'.NET > Silverlight' 카테고리의 다른 글
| Silverlight – DispatcherTimer , Clock (0) | 2009/05/12 |
|---|---|
| Silverlight – Dynamic Page load (0) | 2009/05/10 |
| Silverlight – Host Settings (0) | 2009/05/10 |
| Silverlight OpenFileDialog (0) | 2009/05/07 |
| Silverlight - Access HTML document (0) | 2009/05/07 |
| Silverlight - Access managed code form javascript (0) | 2009/05/05 |
웹 페이지에서 컨트롤이나 Element에 이벤트를 추가하기 위해 Cross-browser를 고려해야 한다.
이럴 때 다음과 같이 코드를 작성하면 되겠다.
if (window.addEventListener)
{
window.addEventListener('click', SomeClass.ClickEventMethod , false);
}
else
{
window.attachEvent('onclick', SomeClass.ClickEventMethod );
}
특정 타겟 브라우저로 개발을 하더라도 위와 같이 작업하는 습관은 정말 중요할 것 같다.
'Web > JavaScript' 카테고리의 다른 글
| Ext JS 3.0 (0) | 2009/09/23 |
|---|---|
| Javascript : Microsoft OS & Internet Explorer Agent Check (0) | 2009/07/20 |
| Javascript – 이벤트 추가 (0) | 2009/05/08 |
| 스크립트에서 클라이언트 프로그램 실행 시키는 방법 (3) | 2009/02/17 |
| [js]브라우저의 오른쪽 상단의 X표시를 누르거나 창을 닫을때 이벤트 잡기! (1) | 2009/01/05 |
| DHTML을 빠르게 하는 12가지 튜닝 (0) | 2008/07/14 |
Silverlight에서는 OpenFileDialog는 사용 가능하지만 SaveFileDialog는 제공하지 않는다.
이는 사용자 PC에 접근하는 권한이 없기 때문에 파일 저장에 관한 내용은 제공하지 않는다.
Isolated Storage
- 임시로 저장할 수 있는 공간을 XAP Application 마다 제공한다.
아직 이쪽에 내용을 아는 것이 부족한데 천천히 추가해 나가야 겠다. -_ -;;
'.NET > Silverlight' 카테고리의 다른 글
| Silverlight – Dynamic Page load (0) | 2009/05/10 |
|---|---|
| Silverlight – Host Settings (0) | 2009/05/10 |
| Silverlight OpenFileDialog (0) | 2009/05/07 |
| Silverlight - Access HTML document (0) | 2009/05/07 |
| Silverlight - Access managed code form javascript (0) | 2009/05/05 |
| Silverlight - Network (2) | 2009/04/30 |
실버라이트를 통해 HTML 문서에 접근하여 처리를 할 수 있다.
그에 어떠한 내용이 필요한지 다음과 같이 정리를...
많이 부족하지만 ㅠㅠ..
Access HTML document
// 다음과 같은 위치의 namespace가 필요하다
using System.Windows.Browser;
// static HtmlPage class provides entry point
HtmlPage.Navigate("주소"); // 지정된 주소로 페이지를 이동한다.
String server = HtmlPage.DocumentUri.Host; // 현재 접속된 페이지의 URI 값을 가져온다
// HTML 이벤트 엘레먼트에 이벤트를 작성
HtmlElement myButton = HtmlPage.Document.GetElementbyId("myButtonId");
Mybutton.AttachEvent("onclick", new EventHandler(this.myButtonClicked));
'.NET > Silverlight' 카테고리의 다른 글
| Silverlight – Host Settings (0) | 2009/05/10 |
|---|---|
| Silverlight OpenFileDialog (0) | 2009/05/07 |
| Silverlight - Access HTML document (0) | 2009/05/07 |
| Silverlight - Access managed code form javascript (0) | 2009/05/05 |
| Silverlight - Network (2) | 2009/04/30 |
| Silverlight domain access control (0) | 2009/04/28 |
Silverlight - Access managed code form javascript

실버라이트로 자바스크립트와 통신할 때 이용할 수 있다.
실버라이트와 페이지 사이에 동적 데이터를 주고 받을 때 사용하면 좋을듯...
1. 메소드 생성
[ScriptableMember]
Public void Search(string name) {…}
2. 등록
HtmlPage.RegisterScriptableObject("entry", this);
3. 엘레먼트에 등록
Var control = document.getElementById("id");
control.Content.Entrypoint…
'.NET > Silverlight' 카테고리의 다른 글
| Silverlight OpenFileDialog (0) | 2009/05/07 |
|---|---|
| Silverlight - Access HTML document (0) | 2009/05/07 |
| Silverlight - Access managed code form javascript (0) | 2009/05/05 |
| Silverlight - Network (2) | 2009/04/30 |
| Silverlight domain access control (0) | 2009/04/28 |
| REMIX08 RIA, UX의 세계 (0) | 2008/06/16 |
이올린에 북마크하기
이올린에 추천하기



Prev




