WinRT에 대한 첫 번째 사용자 지정 사용자 정의 컨트롤을 작성하고 있는데 문제가 발생했습니다.Windows 8 Metro에서 사용자 지정 컨트롤 작성
PART_NwBadge 이미지를 노출하고 싶습니다. 내 컨트롤에서 종속성 속성으로 표시 여부를 선택하고 싶습니다. 그런 다음 스타일에 setter를 통해 기본값을 제공하고 싶습니다. 이 부분은 작동하지 않습니다. 대신 DependencyProperty의 기본값 (BadgedButton.cs)이 적용됩니다.
내가 설명한 것을 수행 할 수 있습니까? 아니면 C# 코드에서 기본값을 설정해야합니까? C# 코드에서 값을 설정해야하는 경우 누군가 코드에서 이미지 리소스를로드하는 방법에 대해 의견을 말합니까? 많은 검색을 한 후에도 아직 작동하는 솔루션을 찾지 못했습니다.
마지막으로, 이것이 사용자 정의 컨트롤을 작성하는 첫 번째 시도이기 때문에 직접 문제와 관련이없는 경우에도 개선 할 사항을 제안하십시오.
윈도우 8 소비자 미리보기
의 C#/WinRT/지하철
비주얼 스튜디오 11 베타
테마/generic.xaml을
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:l="using:InkSdkTestApplication.Controls">
<Style TargetType="l:BadgedButton">
<Setter Property="Width" Value="36"/>
<Setter Property="Height" Value="36"/>
<Setter Property="Background" Value="#1C1C1C"/>
<Setter Property="BorderBrush" Value="White"/>
<Setter Property="BorderThickness" Value="2"/>
<Setter Property="NwBadge">
<Setter.Value>
<Image Width="16" Height="16" Source="../Assets/mouse_16x16.png"/>
</Setter.Value>
</Setter>
<Setter Property="NwBadgeVisibility" Value="Collapsed"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="l:BadgedButton">
<Border x:Name="PART_Border"
Width="{TemplateBinding Width}"
Height="{TemplateBinding Height}"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<Grid>
<ContentPresenter x:Name="PART_Content"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Content="{TemplateBinding Content}"/>
<Image x:Name="PART_NwBadge"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Width="16" Height="16"
Visibility="{TemplateBinding NwBadgeVisibility}"
Source="{TemplateBinding NwBadge}"/>
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
제어/BadgedButton.cs
namespace InkSdkTestApplication.Controls
{
public sealed class BadgedButton : Control
{
#region // Dependency Properties
public static DependencyProperty ContentProperty =
DependencyProperty.Register(
"Content",
typeof(FrameworkElement),
typeof(BadgedButton),
new PropertyMetadata(null));
public static DependencyProperty NwBadgeProperty =
DependencyProperty.Register(
"NwBadge",
typeof(Image),
typeof(BadgedButton),
new PropertyMetadata(null));
public static DependencyProperty NwBadgeVisibilityProperty =
DependencyProperty.Register(
"NwBadgeVisibility",
typeof(Visibility),
typeof(BadgedButton),
new PropertyMetadata(Visibility.Visible));
#endregion
#region // Public Properties
public FrameworkElement Content
{
get { return (FrameworkElement)GetValue(ContentProperty); }
set { SetValue(ContentProperty, value); }
}
public Image NwBadge
{
get { return (Image)GetValue(NwBadgeProperty); }
set { SetValue(NwBadgeProperty, value); }
}
public Visibility NwBadgeVisibility
{
get { return (Visibility)GetValue(NwBadgeVisibilityProperty); }
set { SetValue(NwBadgeVisibilityProperty, value); }
}
#endregion
public BadgedButton()
{
this.DefaultStyleKey = typeof(BadgedButton);
}
}
}
맞춤 컨트롤을 작성하지 않을 것을 제안 할 수 있습니까? 바인딩이있는 일반 템플릿을 만드시겠습니까? –