- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我无法理解...我开始认为它无法完成。
我想创建一个允许测量包含的文本的自定义文本 block 控件。我不能不执行以下操作,因为 OnRender() 是密封的。但是,如果我使用 new,则永远不会调用我的新“OnRender()”。那怎么办呢?有没有更好的办法? (CustomTextBlock 在 MVVM 框架的 ItemsControl 中使用。我不想创建任何额外的依赖属性)。
请提前告知并感谢。
XAML 中的用法:
<i:CustomTextBlock Grid.Row="0" x:Name="tbc"
Text="{Binding Text}"
FontSize="{Binding FontSize}"
FontStyle="Italic"
Foreground="{Binding Color}"
FontFamily="Segoe Script" />
控件定义:
public class CustomTextBlock : TextBlock
{
public CustomTextBlock() : base()
{
}
// THIS FAILS...BUT "NEW" IS NEVER CALLED???
protected override void OnRender(DrawingContext drawingContext)
{
base.OnRender(drawingContext);
Typeface typeface = new Typeface(this.FontFamily,
this.FontStyle,
this.FontWeight,
this.FontStretch);
FormattedText formmatedText = new FormattedText(
this.Text,
System.Threading.Thread.CurrentThread.CurrentCulture,
this.FlowDirection,
typeface,
this.FontSize,
this.Foreground);
}
}
最佳答案
无论如何我都无法弄清楚 OnRender,但这可以解决我的问题。这是一个可能的解决方案,虽然不是真正的答案。
在 UserControl 的代码隐藏中,XAML 使用 x:Name="tbc"定义了 TextBlock。
希望这对某人有帮助。
public partial class InkStringView : UserControl
{
public InkStringView()
{
InitializeComponent();
tbc.Loaded += new RoutedEventHandler(InkStringView_Loaded);
}
void InkStringView_Loaded(object sender, RoutedEventArgs e)
{
TextBlock tb = sender as TextBlock;
Typeface typeface = new Typeface(
tb.FontFamily,
tb.FontStyle,
tb.FontWeight,
tb.FontStretch);
FormattedText formattedText = new FormattedText(
tb.Text,
System.Threading.Thread.CurrentThread.CurrentCulture,
tb.FlowDirection,
typeface,
tb.FontSize,
tb.Foreground);
StringViewModel svm = tb.DataContext as StringViewModel;
svm.Bounds = formattedText.GetBoundingRect();
svm.MidlineY1 = svm.MidlineY2 = svm.Bounds.Top + 0.45 * (formattedText.Baseline - svm.Bounds.Top);
double width = tb.ActualWidth;
double height = tb.ActualHeight;
var parent = VisualTreeHelper.GetParent(this);
while (!(parent is Window))
{
parent = VisualTreeHelper.GetParent(parent);
}
GeneralTransform gt = tb.TransformToAncestor(parent as UIElement);
Point offset = gt.Transform(new Point(0, 0));
double controlTop = offset.Y;
double controlLeft = offset.X;
}
}
关于c# - 如何使用 OnRender 自定义 TextBlock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25706684/
可以通过 TextBlock 文本值设置 TextBlock 的前景属性吗? 例如:文本值是Mike,前景属性是Black,值是Tim,属性值是green等。我用google搜索,但没有找到任何解决方
我有一个显示大量信息的 ListView ,但是当它为空时,我想在其上覆盖一个文本 block ,上面写着“没有要显示的信息”或“bla-bla-bla 添加信息”。 ListView 设置为响应鼠标
我正在阅读 Scott Meyers 的 Effective C++ 3rd。 在第 3 项中: Use const whenever possible. In order to use const
我什么时候使用 的文本属性我什么时候应该把我的文字放在 的内容中? ? vs. Example Text 最佳答案 前者可以绑定(bind),而后者在组合 Run
作为背景,我有一个很长的 ID,它太长而无法在 TextBlock 的给定区域中显示。 ID 的有趣部分是结尾,也就是最右边的部分。 我想要做的是 TextBlock,而不是文本向右溢出并切断最右边的
我正在使用 MVVM 模式,并且我的 ModelView 中有字符串类型属性。 该字符串可能包含以下 HTML 标记: , , , 我需要将 TextBlock 中的某些文本部分设为正常、粗体或斜
我想在屏幕上显示一个数字。如果该数字为 0,我根本不希望它显示。 在常规触发器未能解决我的问题后,我尝试了上述代码
我有一个 TextBlock 和一个 Rectangle,它们都位于一个空的 WPF4 窗口中。 TextBlock 的 Foreground 和 Rectangle 的 Fill 都设置为值为 #8
我有一个 TextBlock其中可能包含很长的文本,所以我想为其添加一个垂直滚动条。我最初的尝试是包装一个 ScrollViewer周围。这行得通,但问题是当我放大时,宽度也被放大了。我尝试像这样禁用
TextBlock 控件中是否可以使用边距文本? 我对 textBlock 控件的风格在这里: --> -->
我的 DataGrid 中的专栏之一包含 Hyperlink在 TextBlock . When a row is selected, the hyperlink shows as blue on b
如果将 TextWrapping 设置为“Wrap”,则 WPF TextBlock 可以包含多行文本。 是否有一种“干净”的方式来获取文本行数?我考虑查看所需的高度并将其除以每条线的估计高度。然而,
有没有办法在控件下方的 TextBlock 中显示错误内容,类似于以下设置工具提示以包含错误文本的方式?
在下面的 XAML 中,我试图包装绑定(bind)到“PortfolioCodes”和“CommentaryText”的 TextBlock,但似乎“Wrapping”不适用于 TextBlock。我
我有一个StackPanel,但以下行: 不包装文字。
我有一个包含大约 15-20 个文本 block 的屏幕,每个文本 block 绑定(bind)到不同的属性,起初所有的文本 block 都是空的,文本更新来自其他客户端。 我想做的是在文本更改时为闪
我有一个名为“findListText”的文本 block 。在这里,我正在更新其中的文本: private void InstantSearch(object sender, KeyEventArg
我试图找出创建样式/触发器以将前景设置为红色的最佳方法,当值 关于WPF Te
我确实有一个 WPF 应用程序实时显示数据(从另一个线程计算)。但是我的 UI 组件(这里是 TextBlock)更新非常缓慢。 我使用传统的数据绑定(bind) PropertyChanged通知。
我想读取一个文件,然后根据某些条件,用不同的颜色标记一些行。 我发现了类似的问题和答案,但它不是使用 MVVM 模式编写的: Selective coloring on dynamic TextBlo
我是一名优秀的程序员,十分优秀!