我想创建一个新的键绑定来改变语法,比如HTML或CSS.我搜索了官方和非官方文档,看看我的问题是否有任何答案.
谢谢,亚历克斯.
我想从在路由器插座内部渲染的子组件进行导航.我的父组件有一个路由器配置,我想手动导航一些事件.但是我不知道如何在没有输出的情况下从子节点向父节点传递一些数据(用于导航).因为这种结构不起作用
<router-outlet (navigateTo)="navigateToMessagePart($event)"></router-outlet>
Run Code Online (Sandbox Code Playgroud)
我怎么能以正确的方式做到这一点?也许从孩子那里导航吧?但我如何从孩子那里得到父方法.非常感谢您的帮助!
我有这个:
<TabControl Margin="0,24,0,0">...</TabControl>
Run Code Online (Sandbox Code Playgroud)
我想只绑定"Top"TabControl 的一部分,直觉上我会这样做:
<TabControl Margin="0,{Binding ElementName=TheMenu, Path=Height},0,0">
...
</TabControl>
Run Code Online (Sandbox Code Playgroud)
我该怎么做 ?
在我的WPF项目中,我有一个ListBox来显示List<string>集合中的项目.我想让这些项目的文本可编辑,所以我将每个项目包装在带有TextBox的ItemTemplate中(可能不是最好的方法,但我是WPF的新手).我只是将TextBoxes的Text属性绑定到每个项的值时遇到了麻烦.我最后偶然发现了一个使用单个点或句点作为其Path属性({Binding Path=.})的示例:
<ListBox ItemsSource="{Binding ElementName=recipesListbox,Path=SelectedItem.Steps}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBox Text="{Binding Path=.}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Run Code Online (Sandbox Code Playgroud)
但是我不明白为什么单纯使用{Binding}不起作用.
根据微软的说法,它提出了" 双向绑定需要Path或XPath "的例外情况:
[...]句点(.)路径可用于绑定到当前源.例如,Text ="{Binding}"等同于Text ="{Binding Path =.}"
有人可以阐明这种模棱两可的行为吗?
编辑:此外,它似乎{Binding Path=.}不一定提供双向绑定,因为修改文本和移动焦点不会更新底层源(相同的源也具有在DataGrid控件上显示和成功修改的属性).我肯定在这里遗漏了一些东西.
我有一个像这样定义的Popup:
<Popup
Name="myPopup"
StaysOpen="True"
Placement="Bottom"
PlacementRectangle="0,20,0,20"
PlacementTarget="{Binding ElementName=myPopupAnchor}">
<TextBlock ... />
</Popup>
Run Code Online (Sandbox Code Playgroud)
我已经myPopupAnchor为事件MouseEnter和元素添加了事件处理程序MouseLeave.两个事件处理程序切换弹出窗口的可见性.
我的问题是myPopupAnchor的位置只在首次显示弹出窗口时被读取,或者被隐藏然后再次显示.如果锚移动,则弹出窗口不会移动.
我正在寻找解决这个问题的方法,我想要一个动人的Popup.我可以通知WPF PlacementTarget绑定已更改并应再次读取吗?我可以手动设置弹出窗口的位置吗?
目前,我有一个非常粗略的解决方法,涉及关闭然后再次打开弹出窗口,这会导致一些重新绘制问题.
我有一个Activity调用在IDownloaderService.aidl中定义的服务:
public class Downloader extends Activity {
IDownloaderService downloader = null;
// ...
Run Code Online (Sandbox Code Playgroud)
在Downloader.onCreate(Bundle)中,我尝试使用bindService
Intent serviceIntent = new Intent(this, DownloaderService.class);
if (bindService(serviceIntent, sc, BIND_AUTO_CREATE)) {
// ...
Run Code Online (Sandbox Code Playgroud)
在ServiceConnection对象sc中,我做到了这一点
public void onServiceConnected(ComponentName name, IBinder service) {
Log.w("XXX", "onServiceConnected");
downloader = IDownloaderService.Stub.asInterface(service);
// ...
Run Code Online (Sandbox Code Playgroud)
通过添加各种Log.xx,我发现if(bindService(...))之后的代码实际上是在调用ServiceConnection.onServiceConnected之前 - 也就是说,当下载器仍然为null时 - 这让我遇到了麻烦.ApiDemos中的所有样本都通过仅在用户操作触发时调用服务来避免此时间问题.但是,在bindService成功之后,我该怎么做才能正确使用这个服务?如何可靠地等待ServiceConnection.onServiceConnected被调用?
另一个问题有关.是所有的事件处理程序:Activity.onCreate,任何View.onClickListener.onClick,ServiceConnection.onServiceConnected等实际在同一个线程中调用(在文档中提到的"主线程")?它们之间是否存在交错,或Android会安排所有事件逐个处理?或者,究竟什么时候实际上要调用ServiceConnection.onServiceConnected?完成Activity.onCreate或A.oC仍在运行时?
我有一个我想显示/隐藏的控件,具体取决于布尔值.
我有一个NegatedBooleanConverter(切换为true,反之亦然),我需要先运行此转换器.我有一个BooleanToVisibilityConverter,我需要在NegatedBoolConverter之后运行这个转换器.
我该如何解决这个问题?我想在XAML中这样做.
编辑:这是一个可能的解决方案.
这似乎不起作用.它首先使用单独的转换器转换值,然后使用转换后的值执行某些操作.
我需要的是:
为什么这行代码
<TextBlock Text="{Binding Net, StringFormat=c}"/>
Run Code Online (Sandbox Code Playgroud)
当我的所有区域设置都设置为UK时,将结果输出为$ xx.xx.我希望它输出为£xx.xx.有任何想法吗?我尝试过stringformat的不同变体,包括StringFormat = {} {0:C},但仍然得到相同的结果.
谢谢你的期待.
我正在敲打我的桌面上的这个绑定错误..我检查了几个BindingExpression路径错误的帖子,看不到任何与我的情况有关的东西.
无论如何,我有一个名为的自定义控件IncrementingTextBox.我试图在用户'检查' CheckBox上面的时候禁用它.
我对该CheckBox IsChecked属性的绑定工作正常,并在它应该发射时触发.它正在UseSensorLengthConfigurationModel上正确设置属性.
但是,对IncrementingTextBox IsEnabled属性的绑定导致BindingExpression路径错误,因此根本不更新.
作为测试,我尝试在后面的代码启用和禁用控件,它工作得很好,但我似乎无法让Binding工作.
这是我的xaml的一个片段:
...
DataContext="{Binding RelativeSource={RelativeSource Self}}"
...
...
<CheckBox Content="Use Sensor Length" Margin="30,6,0,0"
IsChecked="{Binding ConfigurationModel.UseSensorLength, Mode=TwoWay}"/>
<local:IncrementingTextBox x:Name="video_length_textbox" Margin="0,0,0,5"
IsTextEnabled="False"
IsEnabled="{Binding ConfigurationModel.DontUseSensorLength}"
ValueChanged="VideoEventValueChanged"/>
Run Code Online (Sandbox Code Playgroud)
这是我的ConfigurationModel的一个片段:
public bool DontUseSensorLength
{
get { return !UseSensorLength; }
}
public bool UseSensorLength
{
get { return _useSensorLength; }
set
{
_useSensorLength = value;
OnPropertyChanged("UseSensorLength");
OnPropertyChanged("DontUseSensorLength");
}
}
Run Code Online (Sandbox Code Playgroud)
以下是我在运行应用程序时在输出窗口中收到的错误消息:
System.Windows.Data错误:40:BindingExpression路径错误:'object'''IncrementingTextBox'(Name ='video_length_textbox')'上找不到'ConfigurationModel'属性.BindingExpression:路径= ConfigurationModel.DontUseSensorLength; DataItem ='IncrementingTextBox'(Name ='video_length_textbox'); target元素是'IncrementingTextBox'(Name …
我最近在WPF中编程很多,但我的View和ViewModel在这一点上并不是分开的.嗯,这是部分原因.我的所有绑定都与文本框中的文本,标签内容,数据网格中的列表,......相关,都是由常规属性完成的,其中包含NotifyPropertyChanged事件.
处理按钮点击或文本更改内容的所有事件都是通过链接事件来完成的.现在,我想开始使用命令并找到这篇文章:http://www.codeproject.com/Articles/126249/MVVM-Pattern-in-WPF-A-Simple-Tutorial-for-Absolute.它解释了如何设置MVVM,但我对它感到困惑RelayCommand.
它做了什么工作?它对我表单中的所有命令都可用吗?如果(a)某些文本框未填写,如何禁用该按钮?
编辑1:
对"我的表单中的所有命令都可用吗?"的一个很好的解释.在这里回答:https://stackoverflow.com/a/22286816/3357699
这是我到目前为止的代码:https://stackoverflow.com/a/22289358/3357699