- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
如何将用户控件资源内的控件绑定(bind)到属性?或者,我可以从后面的代码中找到控件并从那里获取和设置值吗?
这是我的标记。我已将其简化为相关部分:
Salesmen.xaml:
<UserControl.Resources>
<ControlTemplate x:Key="EditAppointmentTemplate1" TargetType="local:SchedulerDialog" x:Name="ControlTemplate">
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
<Grid>
<Grid Name="grdTotal" Grid.Row="4" Visibility="{Binding ResourceTypesVisibility}">
<TextBox x:Name="totalSalesmen" Grid.Row="0" Grid.Column="1" Margin="3" Width="120" Text="{Binding Parent.totalSalesmen, ElementName=LayoutRoot, Mode=TwoWay}" />
</Grid>
</ScrollViewer>
</ControlTemplate>
<Style x:Key="EditAppointmentDialogStyle1" TargetType="local:SchedulerDialog">
<Setter Property="Template" Value="{StaticResource EditAppointmentTemplate1}" />
</Style>
</UserControl.Resources>
<Grid x:Name="LayoutRoot" Background="White" HorizontalAlignment="Left" Margin="10,10,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackPanel Orientation="Vertical">
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" BorderBrush="Transparent">
<telerik:RadCalendar Name="RadCalendar" SelectedDate="{Binding CurrentDate, ElementName=RadScheduleViewTests, Mode=TwoWay}" IsTodayHighlighted="True"
telerik:StyleManager.Theme="Metro" HorizontalAlignment="Left" VerticalAlignment="Top" FirstDayOfWeek="Sunday" Margin="0,0,15,0"
SelectionChanged="RadCalendar_SelectionChanged_1" >
</telerik:RadCalendar>
</ScrollViewer>
</StackPanel>
<telerik:RadScheduleView Name="RadScheduleViewTests" MinAppointmentWidth="100" Tag="{Binding Path=Context, ElementName=TestDayPage}"
telerik:StyleManager.Theme="Metro" Grid.Column="1" EditAppointmentDialogStyle="{StaticResource EditAppointmentDialogStyle1}"
AppointmentCreating="RadScheduleViewTests_AppointmentCreating_1" AppointmentEditing="RadScheduleViewTests_AppointmentEditing_1"
AppointmentDeleting="RadScheduleViewTests_AppointmentDeleting_1" FirstDayOfWeek="Sunday" ShowDialog="RadScheduleViewTests_ShowDialog_1"
AppointmentEdited="RadScheduleViewTests_AppointmentEdited_1">
<telerik:RadScheduleView.DragDropBehavior>
<examiners:CustomDragDropBehaviour/>
</telerik:RadScheduleView.DragDropBehavior>
<telerik:RadScheduleView.SchedulerDialogHostFactory>
<test:CustomScheduleViewDialogHostFactory />
</telerik:RadScheduleView.SchedulerDialogHostFactory>
<telerik:RadScheduleView.ViewDefinitions>
<telerik:DayViewDefinition/>
<telerik:WeekViewDefinition/>
<telerik:MonthViewDefinition/>
<telerik:TimelineViewDefinition/>
</telerik:RadScheduleView.ViewDefinitions>
</telerik:RadScheduleView>
</Grid>
这是我的属性(property)。尽管双向绑定(bind),它始终为空:
Salesmen.xaml.cs:
string totalSalesmen { get; set; }
我听说过 VisualTreeHelper和 LogicalTreeHelper .这些可能会启用另一种方法——找到控件并手动获取它们。但是,VisualTreeHelper 只能看到 LayoutRoot 及其子项(不是 UserControl.Resources),而 LogicalTreeHelper 似乎不可用(这是一个 SilverLight 5 项目;我不知道 Silverlight 5 使用什么框架。我知道 LogicalTreeHelper 是仅适用于 4.5 及更高版本)
感谢您的帮助。 注意:此问题将获得 +50 赏金。系统要求我等待2天才能放赏金,所以我会放赏金并在2天后接受答案。在此之前,如果您的答案有效,我会通知您。
最佳答案
您对totalSalesmen 的绑定(bind)
以及EditAppointmentTemplate1 中的所有内容只要Template
就不会产生任何影响永远不会实例化。将 Template
(ControlTemplate 和 DataTemplate)视为蓝图。内部定义的元素仅在某处使用模板时实例化。
你有什么用法吗?像这样:
<Grid>
...
<SchedulerDialog Template="{StaticResource EditAppointmentTemplate1}"/>
...
</Grid>
[编辑 #1]
好吧,让我们看看...您的双向 Binding
到 totalSalesmen 看起来不错,尽管有点臭。我认为属性 totalSalesmen 应该存在于 DataContext
中(这样绑定(bind)起来会更容易)。但首先让我们尝试让您的代码正常工作,也许我们稍后会做得更好:
问题
当(在一个单独的 xaml 文件中)在 Bindings
中使用 ElementName
同时使用模板定义 UI 的各个部分时(记住:模板中的内容仅在某处使用时创建,并且创建可能发生在不同的时间点)存在风险,您希望彼此了解的元素实际上是在不同的 NameScopes 中创建的.您受影响的 ElementName-Bindings 将不起作用。只是默默地行不通。
治愈
您可以尝试一个技巧:确保您有一个 StaticResource
,其中包含对您最初希望由 ElementName
使用的元素的引用。然后您只需针对该 StaticResource
编写一个 Binding
。看看我在这里做了什么:
<UserControl x:Class="Salesmen" ... x:Name="me">
<UserControl.Resources>
<BindableObjectReference x:Key="MyUserControl" Object="{Binding ElementName=me}"/>
<ControlTemplate x:Key="EditAppointmentTemplate1"
TargetType="local:SchedulerDialog">
...
<TextBox Text="{Binding Path=Object.totalSalesmen,
Source={StaticResource MyUserControl}, Mode=TwoWay}"/>
...
</ControlTemplate>
</UserControl.Resources>
代码
public class BindableObjectReference : DependencyObject
{
public object Object
{
get { return GetValue( ObjectProperty ); }
set { SetValue( ObjectProperty, value ); }
}
public static readonly DependencyProperty ObjectProperty =
DependencyProperty.Register( "Object", typeof( object ),
typeof( BindableObjectReference ), new PropertyMetadata( null ) );
}
[编辑 #2]
当您绑定(bind)到 DataContext 的属性时,您只需指定路径而不是源(隐含的源将是 DataContext):
Text="{Binding Path=totalSalesmen, Mode=TwoWay}"
关于c# - 如何绑定(bind)或以其他方式获取和设置资源中控件的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30163447/
我需要您在以下方面提供帮助。近一个月来,我一直在阅读有关任务和异步的内容。 我想尝试在一个简单的 wep api 项目中实现我新获得的知识。我有以下方法,并且它们都按预期工作: public Htt
我的可执行 jar 中有一个模板文件 (.xls)。不需要在运行时我需要为这个文件创建 100 多个副本(稍后将唯一地附加)。用于获取 jar 文件中的资源 (template.xls)。我正在使用
我在查看网站的模型代码时对原型(prototype)有疑问。我知道这对 Javascript 中的继承很有用。 在这个例子中... define([], function () { "use
影响我性能的前三项操作是: 获取滚动条 获取偏移高度 Ext.getStyle 为了解释我的应用程序中发生了什么:我有一个网格,其中有一列在每个单元格中呈现网格。当我几乎对网格的内容做任何事情时,它运
我正在使用以下函数来获取 URL 参数。 function gup(name, url) { name = name.replace(/[\[]/, '\\\[').replace(/[\]]/,
我最近一直在使用 sysctl 来做很多事情,现在我使用 HW_MACHINE_ARCH 变量。我正在使用以下代码。请注意,当我尝试获取其他变量 HW_MACHINE 时,此代码可以完美运行。我还认为
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 关闭 9 年前。 要求提供代码的问题必须表现出对所解决问题的最低限度的理解。包括尝试过的解决方案、为什么
由于使用 main-bower-files 作为使用 Gulp 的编译任务的一部分,我无法使用 node_modules 中的 webpack 来require 模块code> dir 因为我会弄乱当
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 5 年前。 Improve this qu
我使用 Gridlayout 在一行中放置 4 个元素。首先,我有一个 JPanel,一切正常。对于行数变大并且我必须能够向下滚动的情况,我对其进行了一些更改。现在我的 JPanel 上添加了一个 J
由于以下原因,我想将 VolumeId 的值保存在变量中: #!/usr/bin/env python import boto3 import json import argparse import
我正在将 MSAL 版本 1.x 更新为 MSAL-browser 的 Angular 。所以我正在尝试从版本 1.x 迁移到 2.X.I 能够成功替换代码并且工作正常。但是我遇到了 acquireT
我知道有很多关于此的问题,例如 Getting daily averages with pandas和 How get monthly mean in pandas using groupby但我遇到
This is the query string that I am receiving in URL. Output url: /demo/analysis/test?startDate=Sat+
我正在尝试使用 javascript 中的以下代码访问 Geoserver 层 var gkvrtWmsSource =new ol.source.ImageWMS({ u
API 需要一个包含授权代码的 header 。这就是我到目前为止所拥有的: var fullUrl = 'https://api.ecobee.com/1/thermostat?json=\{"s
如何获取文件中的最后一个字符,如果是某个字符,则删除它而不将整个文件加载到内存中? 这就是我目前所拥有的。 using (var fileStream = new FileStream("file.t
我是这个社区的新手,想出了我的第一个问题。 我正在使用 JSP,我成功地创建了 JSP-Sites,它正在使用jsp:setParameter 和 jsp:getParameter 具有单个字符串。
在回答 StoreStore reordering happens when compiling C++ for x86 @Peter Cordes 写过 For Acquire/Release se
我有一个函数,我们将其命名为 X1,它返回变量 Y。该函数在操作 .on("focusout", X1) 中使用。如何获取变量Y?执行.on后X1的结果? 最佳答案 您可以更改 Y 的范围以使其位于函
我是一名优秀的程序员,十分优秀!