我正在尝试访问内容控件的控件模板内的用户控件.特别:
<ContentControl x:Name="MyList" >
<ContentControl.Template>
<ControlTemplate x:Name="MyControlTemplate">
<Border RenderTransformOrigin="0,0" x:Name="border">
<UserControls:MyControl x:Name="MyControlName" Width="100" ViewModel="{Binding}" />
Run Code Online (Sandbox Code Playgroud)
我可以访问this.MyList,但它说明了找不到.MyControlName.在这种情况下如何从代码隐藏中访问MyControlName对象?
谢谢!
我有以下.xaml for DataGrid,并希望在.cs代码中的某些条件下显示/隐藏按钮.xaml代码如下
<DataGridTemplateColumn Header="Action" Width="auto" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Button x:Name="btnConfirm" Content="Confirm" Click="ConfirmButton_Click" Height="auto" Width="auto" Opacity="100" Background="Transparent" BorderBrush="Transparent" HorizontalAlignment="Left"/>
<Button x:Name="btnDecline" Content="Decline" Click="btnDecline_Click" Height="auto" Width="auto" Opacity="100" Background="Transparent" BorderBrush="Transparent" HorizontalAlignment="Left" />
<Button x:Name="btnCancel" Content="Cancel" Click="btnCancel_Click" Height="auto" Width="auto" Opacity="100" Background="Transparent" BorderBrush="Transparent" HorizontalAlignment="Left"/>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
Run Code Online (Sandbox Code Playgroud)
和.cs代码是
foreach (sp_ProcessingJobsResult item in grdUnConfirmJobs.ItemsSource)
{
var row = grdUnConfirmJobs.ItemContainerGenerator.ContainerFromItem(item) as System.Windows.Controls.DataGridRow;
if (item.Status == "Cancellation Requested.")
{
//how find control
}
}
Run Code Online (Sandbox Code Playgroud) 我找到并修改了以下代码,以便使用iTextSharp类将我的dataGrid导出为pdf文档.
private void ExportToPdf(DataGrid grid)
{
PdfPTable table = new PdfPTable(grid.Columns.Count);
using (Document doc = new Document(iTextSharp.text.PageSize.A4))
{
using (PdfWriter writer = PdfWriter.GetInstance(doc, new System.IO.FileStream("Test.pdf", FileMode.Create)))
{
doc.Open();
for (int j = 0; j < grid.Columns.Count; j++)
{
table.AddCell(new Phrase(grid.Columns[j].Header.ToString()));
}
table.HeaderRows = 1;
IEnumerable itemsSource = grid.ItemsSource as IEnumerable;
if (itemsSource != null)
{
foreach (var item in itemsSource)
{
DataGridRow row = grid.ItemContainerGenerator.ContainerFromItem(item) as DataGridRow;
if (row != null)
{
DataGridCellsPresenter presenter = FindVisualChild<DataGridCellsPresenter>(row);
for (int i = …Run Code Online (Sandbox Code Playgroud) 我有按钮点击超链接按钮的堆栈面板我必须更改堆栈面板背景
<HyperlinkButton Name="WhereToStayButton" Margin="0,0,0,0" Grid.Row="5" Click="WhereToStayButton_Click">
<HyperlinkButton.Template>
<ControlTemplate TargetType="HyperlinkButton">
<StackPanel Orientation="Horizontal" Background="#EBEBEB" x:Name="sp1">
<Image Source="/Assets/Menu/wheretostay.png" Stretch="None"/>
<TextBlock Text="{Binding Path=LocalizedResources.menu_where_stay, Source={StaticResource LocalizedStrings}}" VerticalAlignment="Center" Margin="5,10" FontSize="26" Foreground="Black" FontFamily="{StaticResource CustomLucidaGrandStyle}"/>
</StackPanel>
</ControlTemplate>
</HyperlinkButton.Template>
</HyperlinkButton>
Run Code Online (Sandbox Code Playgroud) 在我的 WPF 项目中,我在代码隐藏中创建了一个自定义 ListView。在这个 ListView 中有一列包含一个按钮,由我的资源字典中的数据模板定义。
<DataTemplate x:Key="DataTemplate_EditButton">
<Button Style="{DynamicResource Button_Image}" Width="25" ... />
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
当我初始化 ListView 时,我使用以下代码创建列:
GridViewColumn buttonColumn = new GridViewColumn();
DataTemplate dt = Application.Current.TryFindResource("DataTemplate_EditButton") as DataTemplate;
buttonColumn.CellTemplate = dt;
...
gridView.Columns.Add(buttonColumn);
Run Code Online (Sandbox Code Playgroud)
现在我想将一个事件处理程序绑定到按钮的点击事件。我不能在模板中执行此操作,因为我需要为 Dictionary 创建一个隐藏类的代码,并且无论如何我都需要 ListView-UserControl 中的事件处理程序。当我使用数据模板创建列时,当然无法访问为每一行创建的按钮。
处理以所述方式创建的按钮的点击事件的最佳方法是什么?
提前致谢,
弗兰克