Why is 'StringFormat' malfunctioning?
About Data Type
If you are binding a string
value to text property of TextBlock
or TextBox
, then append StringFormat
, it will work.
For example:
Otherwise, let's say if there's a object
value is bound to text, it won't work at all. In this situation, you need a Converter
to solve.
Decimal Type
If you are binding a string
value to text property and the StringFormat
is like: {}{0:N0}
(formatted number), it won't work either. This also won't work in c# code like string.Format("{0:n0}", value)
(if value is astring
)
Why does my UI text blurry after apply DropShadowEffect?
- Solution 1: Separate
Control
which appliedDropShadowEffect
from your textControl
. - Solution 2: Add
RenderingBias="Quality"
attribute toDropShadowEffect
. See ref - Solution 3:
DropShadowEffect
may cause performance issue, trySystemDropShadowChrome
instead:- Add reference to project:
PresentationFramework.Aero
- Add using:
xmlns:dropShadow="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero"
- Add reference to project:
How to debug codes in design mode?
Here are the steps to debug a control at design time:
Start a second instance of Visual Studio
Attach to the first instance(vs designer is called XDesProc.exe
) from the Debug menu
In the second instance, open the source code of your control
Set breakpoints at appropriate locations
In the first VS instance, reload the designer
Note that this technique isn't limited to controls; you can also use it to debug VS extensions, or anything that executes within Visual Studio.
see ref
How to binding control events to commands
How to use async command execute
private async void MyCommandExecute()
{
IsBusy = true;
var models = await Task.Run(() =>
{
return GetDataFromServer();
});
IsBusy = false;
}
or in a better way, encapsulate DoWork
method in ViewModelBase
:
ViewModelBase.cs
rprc IsBusy;
public async void DoProgressAsync(Func workFunc, Action callbackAction)
{
IsBusy = true;
var result = await Task.Run(workFunc);
callbackAction(result);
IsBusy = false;
}
Events for Switch TextBlock to TextBox when mousedown
Here is fields and properties in the custom control we need: _isMouseDown
; IsEditMode
(dependency property)
public override void OnApplyTemplate()
{
_textblock.PreviewMouseLeftButtonDown += delegate { _isMouseDown = true; };
_textblockv.PreviewMouseLeftButtonUp += delegate {
if(_isMouseDown) {
IsEditMode = true;
Keyboard.Focus(_textBox);
_isMouseDown = false;
}
};
_label.GotKeyboardFocus += delegate{
//same as left button up
};
_textBox.LostKeyboardFocus += delegate {
IsEditMode = false;
};
}
Simple Loading Ellipse
Solid color style ProgressBar
for Indeterminate
for Determinate
Usage
**for 30 seconds pending progress
A little trick using rectangle by scale animation rather than ProgressBar
with Timer
:
AddSorted to List/Collection
///
/// Adds a new item with sorted by comparer in the collection.
///
public static void AddSorted(this IList list, T item, IComparer comparer = null)
{
var comparerPara = comparer;
if (comparerPara == null)
comparerPara = Comparer.Default;
int i = 0;
while (i < list.Count && comparerPara.Compare(list[i], item) < 0)
{
i++;
}
//you may want to invoke this on UI thread if context is at background.
list.Insert(i, item);
}
Then any model which has IComparable
implemented will take effect in this extension method.