클릭하면 도구 설명을 표시해야하는 탐색 명령이 있습니다 (사용하지 않는 이유를 사용자가 알 수 있도록). 문제는 내 xaml 파일의 TouchDown 이벤트를 내 viewmodel로 전달하는 방법을 모른다는 것입니다. command.xaml.cs에서 이벤트를 만드는 대신 바인딩 할 수있는 방법이 있습니까?단추를 클릭 할 때 도구 설명 단추를 사용할 수 없습니다.
명령은 다음과 같이 구성됩니다. 하나의 CommandButton.xaml과 CommandButton.xaml.cs가 있는데 버튼을 설정하는 모든 것은 VM (텍스트, 이미지, 명령 실행 코드 등)에 의해 아래 예와 같이 처리됩니다.
<Button Focusable="True" Name="Btn1" Command="{Binding CommandToExecute}" Tag="{Binding Text}" Foreground="{x:Null}" Style="{DynamicResource ButtonStyle}" ToolTipService.ShowOnDisabled="true" TouchDown="Btn1_OnTouchDown" >
<Button.ToolTip>
<StackPanel>
<TextBlock>Test</TextBlock>
<TextBlock>Load stencil, or not your choice.</TextBlock>
</StackPanel>
</Button.ToolTip>
<shellModule:AutoGreyableImage Source="{Binding Image}" />
</Button>
코드에 관해서는 다음과 같이 기본 명령 클래스에서 처리기 항목의 대부분을 사용하여 분할했습니다.
public abstract class BaseCommand : BindableBase
{
protected IModuleManager ModuleManager { get; set; }
protected IRegionManager RegionManager { get; set; }
protected BaseCommand(IRegionManager regionManager, IModuleManager moduleManager, string pageName = null)
{
RegionManager = regionManager;
ModuleManager = moduleManager;
Text = GetButtonText(pageName + "_BtnTxt");
Image = (ImageSource)Application.Current.FindResource(pageName + "_BtnImg");
}
private string _text;
private ImageSource _image;
public ICommand CommandToExecute => new DelegateCommand<object>(Command, Evaluate);
protected abstract void Command(object obj);
protected virtual bool Evaluate(object obj)
{
return false;
}
public string Text
{
get { return _text; }
set { SetProperty(ref _text, value); }
}
public ImageSource Image
{
get { return _image; }
set { SetProperty(ref _image, value); }
}
protected string GetButtonText(string key)
{
string uiString;
var locExtension = new LocTextExtension
{
Key = "Resources",
ResourceIdentifierKey = key
};
locExtension.ResolveLocalizedValue(out uiString);
return uiString;
}
}
그런 다음 viewmodel에서 명령 특정 항목.
public class Page1CommandViewModel : BaseCommand, IPage1CommandViewModel
{
public Page1CommandViewModel(IRegionManager regionManager, IModuleManager moduleManager) : base(regionManager, moduleManager, PageNames.Page1)
{
}
protected override void Command(object obj)
{
Task.Run(() =>
{
ModuleManager.LoadModule(ModuleNames.Page1Module);
RegionManager.RequestNavigate(RegionNames.ContentRegion, new Uri(PageNames.Page1, UriKind.Relative));
});
}
}
누구든지 올바른 방향으로 나를 가리킬 수 있다면 크게 감사하겠습니다.
클릭하면 도구 설명이 이상합니다. 툴팁을 표시하는 패널의 버튼을 그냥 감싸는 것이 어떻습니까? 이 방법은 버튼 자체가 비활성화되어 있어도 보이게됩니다. – icebat
응용 프로그램이 터치 스크린에서 실행되므로 마우스를 올려 놓지 않고 onclick이 필요한 이유입니다. – user3265613
정말 '클릭'하지 않습니까? 도구 설명은 터치 UI에서 편리한 솔루션이 아닙니다. 이런 방식으로 정보를 표시해야하는 경우 버튼을 모두 사용하지 않도록 설정하고 사용자가 일부 조건에 따라 클릭 할 때 메시지를 표시하는 것이 좋을까요? – icebat