Mittwoch, 19. August 2009
Poll über den verwendeten TestRunner
Dienstag, 18. August 2009
Formatierungen suchen und ersetzen mit Word
Mit MS Word nach Formatierungen suchen und diese ersetzen:
In meinem Beispiel: Text in Schrifgröße 10 ersetzen durch Schriftgröße 8
In Word "Suchen und Ersetzten", die Erweiterte Ansicht aufklappen...
In "Sonderformat" Suchen nach "beliebiges Zeichen" und Ersetzen durch "Suchen nach Text" (Das ist wohl die Computer-gestützte Übersetzung von " gefundener Text"...)
Dann noch die Formatierungen einstellen - auf beiden Feldern - Fertig:

Ok, also doch noch Code dazu:
Selection.Find.ClearFormatting Selection.Find.Font.Size = 10 Selection.Find.Replacement.ClearFormatting Selection.Find.Replacement.Font.Size = 8 With Selection.Find .Text = "^?" .Replacement.Text = "^&" .Forward = True .Wrap = wdFindContinue .Format = True .MatchCase = False .MatchWholeWord = False .MatchWildcards = False .MatchSoundsLike = False .MatchAllWordForms = False End With Selection.Find.Execute Replace:=wdReplaceAll
Freitag, 7. August 2009
SyntaxHighlighter
Hier habe ich eine erste Idee bekommen.
Allerdings wird dort die Version 1.5.1 des SyntaxHighlighters beschrieben. Auf http://alexgorbatchev.com/wiki/SyntaxHighlighter gibts die aktuellste Version.
Wenn man (wie ich ich) erst nach dem Ersten Post vorgeht und anschließend versucht die aktuellste Version zu verwenden geht erst einmal nichts mehr. Auf der Upgrade Seite steht dann dazu auch was..
Jedenfalls ist der Quellcode nun gut zu lesen..
Wpf ContextMenuNotEnabledBug
Gestern habe ich Probleme gehabt mit einem wpf Bug (?) – In einer Maske (mit wenig Elementen) waren die Einträge des Kontext-Menüs (dessen Items an Commands gebunden waren…) nicht aktiv. Erst Nach einem Klick auf ein Element (aber nicht auch jedes…) wurden die Einträge aktiv.. In meinen Augen ein absolut wirres Verhalten.
Nach langem Suchen habe ich eine Erklärung und ein paar Workarounds gefunden: Bei MSDN und in einem anderen Blog.
Persönlich bin eher für fool-proof (Wenn ich in einem Jahr oder in zweien wieder an den code muss denke ich nicht daran die MenuItems zu “Workarounden”….) und minimal-Invasiv.
Also so wenig wie möglich meinen Code “umbiegen”, nur damit das Kontext-Menü funktioniert. Meine Lösung ist daher:
Im code-behind des wpf-Window:
internal BenutzerVerwaltung()
{
InitializeComponent();
ContextMenuNotEnabledBugHelper.Workaround(this);
}
Dazu der ContextMenuNotEnabledBugHelper:
/// <summary>
/// Helper to Work around the ContextMenu[Not]EnabledBug of wpf.
/// see http://social.msdn.microsoft.com/forums/en-US/wpf/thread/7bd75a7c-eab4-4f3a-967b-94a9534a7455/
/// and http://www.wiredprairie.us/journal/2007/04/commandtarget_menuitem_context.html
/// regarding this...
/// </summary>
public static class ContextMenuNotEnabledBugHelper
{
public static void Workaround(Window window)
{
foreach (object child in RecurseChildren(window))
{
if (HasContextMenu(child))
{
Workaround(window, GetContextMenu(child));
}
}
}
private static bool HasContextMenu(object o)
{
return GetContextMenu(o) != null;
}
private static ContextMenu GetContextMenu(object o)
{
if (o is DependencyObject)
{
return (ContextMenu) ((DependencyObject) o).GetValue(ContextMenuService.ContextMenuProperty);
}
return null;
}
private static void Workaround(Window window, ContextMenu contextMenu)
{
foreach (object o in LogicalTreeHelper.GetChildren(contextMenu))
{
if (o is MenuItem)
{
MenuItem menuItem = (MenuItem) o;
IInputElement oldTarget = menuItem.CommandTarget;
menuItem.CommandTarget = window; // <-- this is the Workaround !
if (oldTarget != null)
{
menuItem.CommandTarget = oldTarget;
}
}
}
}
private static IEnumerable RecurseChildren(DependencyObject current)
{
foreach (object child in LogicalTreeHelper.GetChildren(current))
{
yield return child;
if (child is DependencyObject)
{
foreach (object chlidsChild in RecurseChildren((DependencyObject) child))
{
yield return chlidsChild;
}
}
}
}
}
Also: Meinungen dazu ??
Dienstag, 4. August 2009
Keyboard shortcuts could not be assigned…
Da ich (mal wieder) folgenden Fehler vom ReSharper hatte:
Some keyboard shortcuts could not be assigned because the current keyboard scheme is read only.
Change the keyboard scheme and try again.
Nunja. Das hatte ich schon einmal -- gelöst… Wie nur ??
Das Problem ist, dass die Keyboard-Schemes unter
%ProgramFiles%\Microsoft Visual Studio 9\Common7\IDE\<xxxx>.vsk
liegen. – Und damit standardmäßig (für mich) Schreibgeschützt. Also meinen freundlichen Admin nach schreibrechten auf der Datei gefragt… und “Geht”.
Falls jemand weiß, ob sich die keybindings auch im user-profile speichern lassen, bin ich für jeden Tipp dankbar.
Mittwoch, 29. Juli 2009
Markup-Extension in WPF selber erstellen
Markup-Extension in WPF selber erstellen:
Bsp: Ein PersonenAnzeigeControl erwartet ein Objekt vom Typ Person – auch in xaml – hier können aber nur Texte übergeben werden. (Nachname sei eindeutig….) :
Eine Klasse:
public class PersonExtension : MarkupExtension
{
public string Nachname { get; set;}
public override object ProvideValue(IServiceProvider serviceProvider)
{
//Target herausfinden…
IProvideValueTarget provideValueTarget = (IProvideValueTarget) serviceProvider.GetService(typeof (IProvideValueTarget));
DependencyProperty dependencyProperty = provideValueTarget.TargetProperty as DependencyProperty;
if (dependencyProperty == null)
{
return null;
}
//dependencyProperty ist nun das Target, dass gesetzt werden soll (hier „Person“) –
//wichtig, damit Personen nur den Richtigen Properties zugewiesen werden
return dependencyProperty.PropertyType!=typeof(Person) ? null : Person.FindByNachname(this.Nachname);
}
}
Kann wie folgt im xaml verwendet werden
<xaml>
<personenanzeigecontrol person = " { my:Person nachname=Müller } " />
</xaml>
Hinweise:
- Die Klasse PersonExtension kann in xaml als my: PersonExtension oder als my:Person verwendet werden. Funktioniert nur, wenn es keine richtige Klasse my:Person gibt.
- Wenn es einen Konstruktor gäbe
- public PersonExtension(string nachname)…
- Könnte die Extension in xaml (auch) wie folgt verwendet werden: Person=“{my:Person Müller}“
Dienstag, 2. Juni 2009
Leere VisualStudio 2008 Solution im Explorer
Hier gibt's das nochmal zum Nachlesen.
Da ich schon immer mal ein msi-Installer erstellen wollte, habe ich mir dies' als hinreichend kleines Ziel genommen.
Das Ergebnis kann hier begutachtet werden.